Introducció a Angular Universal

Angular Universal és una tecnologia que permet renderitzar aplicacions Angular al servidor. Això millora el rendiment de l'aplicació i l'experiència de l'usuari, especialment en dispositius amb recursos limitats o connexions lentes. També ajuda a millorar el SEO (Search Engine Optimization) perquè els motors de cerca poden indexar el contingut renderitzat al servidor.

Beneficis d'Angular Universal

  1. Millora del rendiment: La renderització al servidor permet que els usuaris vegin el contingut més ràpidament.
  2. Millora del SEO: Els motors de cerca poden indexar el contingut renderitzat al servidor, millorant la visibilitat de l'aplicació.
  3. Millor experiència d'usuari: Els usuaris poden veure el contingut inicial més ràpidament, millorant la percepció de la velocitat de l'aplicació.

Configuració d'Angular Universal

Pas 1: Instal·lació de les dependències necessàries

Per començar a utilitzar Angular Universal, primer hem d'instal·lar les dependències necessàries. Utilitzarem Angular CLI per facilitar aquest procés.

ng add @nguniversal/express-engine

Aquest comandament farà el següent:

  • Instal·larà les dependències necessàries.
  • Configurarà el projecte per utilitzar Angular Universal.
  • Crearà els fitxers necessaris per a la renderització al servidor.

Pas 2: Configuració del servidor

Angular Universal utilitza Express.js com a servidor per renderitzar l'aplicació al servidor. El fitxer server.ts és el punt d'entrada del servidor.

import 'zone.js/dist/zone-node';
import { ngExpressEngine } from '@nguniversal/express-engine';
import * as express from 'express';
import { join } from 'path';
import { APP_BASE_HREF } from '@angular/common';
import { existsSync } from 'fs';

import { AppServerModule } from './src/main.server';

// The Express app is exported so that it can be used by serverless Functions.
export function app(): express.Express {
  const server = express();
  const distFolder = join(process.cwd(), 'dist/your-project-name/browser');
  const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';

  server.engine('html', ngExpressEngine({
    bootstrap: AppServerModule,
  }));

  server.set('view engine', 'html');
  server.set('views', distFolder);

  // Example Express Rest API endpoints
  // server.get('/api/**', (req, res) => { });
  // Serve static files from /browser
  server.get('*.*', express.static(distFolder, {
    maxAge: '1y'
  }));

  server.get('*', (req, res) => {
    res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
  });

  return server;
}

function run(): void {
  const port = process.env.PORT || 4000;

  const server = app();
  server.listen(port, () => {
    console.log(`Node Express server listening on http://localhost:${port}`);
  });
}

declare const __non_webpack_require__: NodeRequire;

if (require.main === module) {
  run();
}

export * from './src/main.server';

Pas 3: Construcció i desplegament

Per construir l'aplicació per a la renderització al servidor, utilitzarem el següent comandament:

npm run build:ssr

Aquest comandament construirà l'aplicació per a la renderització al servidor i crearà els fitxers necessaris a la carpeta dist.

Per iniciar el servidor, utilitzarem el següent comandament:

npm run serve:ssr

Aquest comandament iniciarà el servidor Express i començarà a servir l'aplicació renderitzada al servidor.

Exemples pràctics

Exemple 1: Renderització d'una pàgina simple

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <h1>Benvingut a Angular Universal!</h1>
    <p>Aquesta pàgina està renderitzada al servidor.</p>
  `,
  styles: []
})
export class AppComponent {}

Exemple 2: Renderització amb dades dinàmiques

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-root',
  template: `
    <h1>Benvingut a Angular Universal!</h1>
    <p>Aquesta pàgina està renderitzada al servidor.</p>
    <ul>
      <li *ngFor="let item of items">{{ item.name }}</li>
    </ul>
  `,
  styles: []
})
export class AppComponent implements OnInit {
  items: any[] = [];

  constructor(private http: HttpClient) {}

  ngOnInit() {
    this.http.get<any[]>('https://api.example.com/items')
      .subscribe(data => {
        this.items = data;
      });
  }
}

Exercicis pràctics

Exercici 1: Configuració bàsica d'Angular Universal

  1. Crea un nou projecte Angular.
  2. Afegeix Angular Universal al projecte.
  3. Configura el servidor per a la renderització al servidor.
  4. Construeix i serveix l'aplicació.

Exercici 2: Renderització amb dades dinàmiques

  1. Afegeix un component que faci una sol·licitud HTTP a una API externa.
  2. Renderitza el component al servidor.
  3. Verifica que les dades es mostren correctament a la pàgina renderitzada al servidor.

Resum

En aquesta secció, hem après què és Angular Universal i com pot millorar el rendiment i el SEO de les nostres aplicacions Angular. Hem configurat un projecte Angular per utilitzar Angular Universal, hem creat un servidor amb Express.js i hem vist exemples pràctics de com renderitzar components al servidor. També hem proporcionat exercicis pràctics per reforçar els conceptes apresos.

Curs d'Angular 2+

Mòdul 1: Introducció a Angular

Mòdul 2: Conceptes bàsics de TypeScript

Mòdul 3: Components i plantilles

Mòdul 4: Directives i pipes

Mòdul 5: Serveis i injecció de dependències

Mòdul 6: Enrutament i navegació

Mòdul 7: Formularis en Angular

Mòdul 8: Client HTTP i observables

Mòdul 9: Gestió d'estat

Mòdul 10: Proves en Angular

Mòdul 11: Temes avançats

Mòdul 12: Desplegament i millors pràctiques

© Copyright 2024. Tots els drets reservats