Introducción al papel del token de inyección Angular LOCATION_INITIALIZED

import { LOCATION_INITIALIZED } from '@angular/common'El propósito de esta línea de código es @angular/commonimportar LOCATION_INITIALIZEDun símbolo (también llamado constante, variable o identificador) nombrado desde el módulo del framework Angular. Este símbolo se usa típicamente para manejar el proceso de inicialización de ruta de aplicaciones Angular, especialmente cuando se inicia la aplicación.

Para explicar la función de esta línea de código con más detalle, necesitamos tener una comprensión más profunda del proceso de enrutamiento e inicialización en el marco Angular, así como el LOCATION_INITIALIZEDuso específico de constantes.

Enrutamiento e inicialización angular

Angular es un marco de interfaz de usuario para crear aplicaciones de una sola página (SPA) que gestiona la navegación entre diferentes páginas a través de un mecanismo de enrutamiento. En Angular, el enrutamiento es la forma de especificar las vistas de una aplicación y define qué componente debe cargarse y mostrarse en una URL específica.

En Angular, la inicialización de ruta significa que cuando se inicia la aplicación, el enrutador Angular comienza a escuchar los cambios de URL y carga los componentes correspondientes según la URL actual. Este proceso generalmente se realiza cuando se inicia la aplicación, por lo que es muy crítico porque garantiza que la aplicación pueda cargar y mostrar correctamente el contenido correspondiente cuando el usuario visita diferentes URL.

LOCATION_INITIALIZEDEl papel de las constantes.

LOCATION_INITIALIZEDUna constante es un identificador proporcionado por el marco Angular para indicar la finalización del proceso de inicialización de la ruta. Es @angular/commonparte del módulo, que contiene muchas funciones y herramientas comunes utilizadas comúnmente por las aplicaciones Angular.

Específicamente, LOCATION_INITIALIZEDuna constante es un indicador que indica a los desarrolladores cuándo es seguro realizar operaciones relacionadas con la inicialización de rutas. Cuando se inicia la aplicación, el enrutador activará LOCATION_INITIALIZEDel evento antes que el detector de URL, de modo que el desarrollador pueda realizar algún trabajo de inicialización en este evento para garantizar que la aplicación esté preparada adecuadamente para la navegación de ruta.

Por ejemplo

Para explicar más claramente import { LOCATION_INITIALIZED } from '@angular/common'qué hace, veamos un ejemplo simple para mostrar cómo usarlo en una aplicación Angular.

Supongamos que tenemos una aplicación Angular con múltiples rutas, cada una correspondiente a una página diferente. En algunos casos, es posible que queramos realizar algunas acciones específicas después de que se complete la inicialización de la ruta, como cargar algunos datos antes de que comience la navegación de la ruta o realizar cierta lógica cuando se activa una ruta específica.

El siguiente es un código de muestra que demuestra cómo usar LOCATION_INITIALIZEDconstantes para realizar operaciones después de la inicialización de la ruta:

import {
    
     Component, Injector } from '@angular/core';
import {
    
     Router } from '@angular/router';
import {
    
     LOCATION_INITIALIZED } from '@angular/common';
import {
    
     take } from 'rxjs/operators';

@Component({
    
    
  selector: 'app-root',
  template: `
    <h1>{
     
     { title }}</h1>
    <router-outlet></router-outlet>
  `,
})
export class AppComponent {
    
    
  title = 'Angular Routing Example';

  constructor(private router: Router, private injector: Injector) {
    
    
    // 使用 LOCATION_INITIALIZED 常量来执行初始化操作
    this.router.events.pipe(take(1)).subscribe((event) => {
    
    
      if (event instanceof NavigationEnd) {
    
    
        // 在路由初始化后执行一些操作
        this.initializeAfterNavigation();
      }
    });
  }

  private initializeAfterNavigation() {
    
    
    // 在路由初始化后执行的操作
    console.log('路由已初始化,可以执行额外的操作。');
  }
}

// 在应用程序启动时执行初始化操作
export function appInitializerFactory(
  injector: Injector
) {
    
    
  return () =>
    new Promise<void>((resolve) => {
    
    
      const locationInitialized = injector.get(
        LOCATION_INITIALIZED,
        Promise.resolve(null)
      );

      locationInitialized.then(() => {
    
    
        console.log('路由初始化完成!');
        resolve();
      });
    });
}

// 提供应用程序初始化函数
export const appInitializerProvider = {
    
    
  provide: APP_INITIALIZER,
  useFactory: appInitializerFactory,
  deps: [Injector],
  multi: true,
};

AppComponentEn el ejemplo anterior, usamos constantes en nuestra clase LOCATION_INITIALIZEDpara escuchar eventos cuando se completa la inicialización de la ruta. Una vez que se completa la inicialización de la ruta, ejecutamos initializeAfterNavigationel método, en el que podemos realizar cualquier operación que deba realizarse después de que se inicialice la ruta.

Además, también proporcionamos una appInitializerFactoryfunción llamada que es la función de inicialización de la aplicación. Esta función utiliza LOCATION_INITIALIZEDconstantes para garantizar que la inicialización del enrutamiento esté completa antes de continuar con el proceso de inicio de la aplicación. Esto se appInitializerFactorylogra agregando un proveedor de inyección de dependencia a su aplicación Angular, asegurando que se ejecute cuando se inicie la aplicación.

En resumen, import { LOCATION_INITIALIZED } from '@angular/common'esto permite a los desarrolladores monitorear y manejar el proceso de inicialización de rutas en aplicaciones Angular, asegurando que se realicen acciones específicas antes de que comience la navegación por la ruta. Esta es una característica muy importante que se puede utilizar en varios escenarios, como precarga de datos, verificación de permisos, etc. Al escuchar los eventos de inicialización de rutas, los desarrolladores pueden controlar y personalizar mejor el comportamiento de sus aplicaciones para brindar una mejor experiencia de usuario.

Supongo que te gusta

Origin blog.csdn.net/i042416/article/details/133077100
Recomendado
Clasificación