Cuándo utilizar el método forRoot() de Angular

Problema : necesitábamos compartir un servicio de lenguaje único entre todos los módulos cargados de forma diferida. Durante un año, vi el método forRoot() y simplemente ignoré su poder.

Explicación : El forRoot()método devuelve un NgModuley sus dependencias del proveedor.

En este ejemplo, compartimos un servicio para mantenernos al día con un valor de contador. Cada vez que un componente incrementa el valor almacenado en el servicio de contador, quiero compartirlo con todos los componentes.

El problema es cuando intentas introducir módulos cargados de forma diferida. Observe cómo el componente cargado de forma diferida no comparte el mismo valor de contador. Cuando utilice únicamente componentes cargados con entusiasmo, el siguiente ejemplo funcionará si utiliza un servicio compartido, pero observe cómo se comporta el componente cargado de forma diferida. El componente diferido obtiene su propia instancia del servicio.

import { NgModule } from '@angular/core';
import { CounterService } from './counter.service';
@NgModule({
  providers: [CounterService],
})
export class SharedModule {}

Solución : llame a forRoot() en AppModule y devuelva un ModuleWithProviders en SharedModule.

módulo.ts compartido

import { NgModule,ModuleWithProviders  } from '@angular/core';
import { CounterService } from './counter.service';
@NgModule({
})
export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [ CounterService ]
    }
  }
}

import { NgModule } from '@angular/core';
import { BrowserModule  } from '@angular/platform-browser';
import { SharedModule } from './shared/shared.module';
import { AppComponent } from './app.component';
import { EagerComponent } from './eager.component';
import { routing } from './app.routing';
@NgModule({
  imports: [
    BrowserModule,
    SharedModule.forRoot(),
    routing
  ],
  declarations: [
    AppComponent,
    EagerComponent
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

Ahora el servicio de contador se comparte entre módulos cargados con entusiasmo y módulos cargados de forma diferida.

Otras lecturas recomendadas:http://angularfirst.com/the-ngmodule-forroot-convention/

  • Nota: No recomendaría poner servicios compartidos y directivas compartidas en el mismo módulo. He escrito este artículo como referencia para mí en el futuro.

Validadores asíncronos angulares

Suggested posts

Jest: un poderoso marco de prueba de JavaScript

Jest: un poderoso marco de prueba de JavaScript

Las pruebas son una parte esencial del desarrollo de software. Garantiza que el código sea confiable, funcione como se espera y reduce la probabilidad de errores.

Actualización de una aplicación empresarial a Angular 16

Aquí viene el dolor

Actualización de una aplicación empresarial a Angular 16

Estoy absolutamente convencido de todas las nuevas funciones de Angular v16, comenzando por las señales y, bueno, todo lo demás. Y simplemente no pude resistir la tentación de actualizar una de las aplicaciones de la compañía solo para ver qué tan difícil podría ser.

Related posts

El primer libro para niños sobre drogarse

El primer libro para niños sobre drogarse

(Advertencia: esto es una sátira, con la intención de ser alegremente subversivo; definitivamente no es para niños) Has visto a tu mamá y papá esconderse en la cocina y fumar esos cigarrillos malolientes. ellos te dicen

Dos años en diseño: lo bueno, lo malo y lo feo...

Dos años en diseño: lo bueno, lo malo y lo feo...

“Oye, Siri, toca Me Dive de Olivia Dean”. Fue en mayo de 2021 cuando comencé mi pasantía en Future Academy Africa en Akure, Nigeria.

los pronombres dan mucho miedo

Me llama la atención De repente, como ocurre con tanta frecuencia Es el punto medio de nuevo <No, no el del Pacífico, tú, el del carnaval> Todos los titulares en voz alta...

VIDA ILIMITADA

Cuando creces, tiendes a que te digan que el mundo es como es y que tu vida es solo vivir tu vida dentro del mundo, nunca arriesgar tu vida, solo sigue un camino establecido y muere al final, y trata de no hacerlo. golpea demasiado las paredes. Pero esa es una vida muy limitada.