AngularのforRoot()メソッドを使うタイミング

問題: すべての遅延ロード モジュール間でシングルトン言語サービスを共有する必要がありました。1 年間、forRoot() メソッドを見ても、その威力を単に無視していました。

説明:メソッドは、およびそのプロバイダー依存関係forRoot()を返します。NgModule

この例では、カウンター値を追跡するためにサービスを共有しています。いずれかのコンポーネントがカウンター サービスに格納されている値を増やすたびに、これをすべてのコンポーネントと共有します。

問題は、遅延ロードされたモジュールを導入しようとするときです。遅延ロードされたコンポーネントが同じカウンター値を共有しないことに注意してください。積極ロードされたコンポーネントのみを使用する場合、共有サービスを使用すると以下の例は機能しますが、遅延ロードされたコンポーネントがどのように動作するかに注意してください。遅延コンポーネントは、サービスの独自のインスタンスを取得します。

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

解決策: AppModule でforRoot()を呼び出し、sharedModule で ModuleWithProviders を返します。

共有モジュール

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 {}

これで、カウンター サービスは、積極的にロードされるモジュールと遅延ロードされるモジュール間で共有されるようになりました。

その他の推奨読書:http://angularfirst.com/the-ngmodule-forroot-convention/

  • 注: 共有サービスと共有ディレクティブを同じモジュールに配置することはお勧めしません。この記事は、将来の自分自身の参考として書きました。

Angular 非同期バリデータ

提案された投稿

Jest — 強力な JavaScript テスト フレームワーク

Jest — 強力な JavaScript テスト フレームワーク

テストはソフトウェア開発において不可欠な部分です。これにより、コードの信頼性が保証され、期待どおりに機能し、エラーの可能性が軽減されます。

エンタープライズ アプリを Angular 16 にアップグレードする

痛みが来る

エンタープライズ アプリを Angular 16 にアップグレードする

Angular v16 のすべての新しい機能、シグナルをはじめ、その他すべてに完全に満足しています。そして、その会社のアプリの 1 つをアップグレードして、それがどれほど難しいかを知りたいという衝動を抑えることができませんでした。

関連記事

仕事週間で学ぶことはあなたが思っている以上に重要です

仕事週間で学ぶことはあなたが思っている以上に重要です

私たちは、自分にとって良いとわかっていることを実行するのに苦労していることによく気づきます。大切な人に愛していると伝えることから、海賊のように話すことを忘れないことまで、すでにそうしたことを行っているため、1日、1週間、または1か月のイベントは必要ないと主張する人が常にいます。

24 年度に炭素除去に資金を提供

経路全体にわたる Carbon180 の割り当てリクエストの内訳

24 年度に炭素除去に資金を提供

アリソン・リー著、マネージング政府問題顧問 連邦政府の年次歳出プロセスは、二酸化炭素除去 (CDR) に資金を提供する取り組みの中心です。毎年、Carbon180 は、来年の資金がどこに流れるかの指針となるよう、さまざまな議会事務所に要望書を提出しています。

代名詞は超怖い

頻繁に起こることだが、突然、私は衝撃を受ける 再びミッドウェイだ <いいえ、太平洋にあるものではなく、カーニバルにあるものです> どの見出しも大音量で…..

地球を救ってお金を稼ぐ方法

地球を救ってお金を稼ぐ方法

ペットボトル、ガラス瓶、アルミ缶、グリーンエネルギーパッケージなどを、何回考えずに捨てたことがあるでしょうか? リサイクルする代わりに何かが得られたらいいのにと何度思ったことか。あなたがほとんどの人と同じなら、おそらく答えは何度もあるはずです。リサイクルは、多くの場合、即時的または具体的な利益をもたらさない面倒な作業、面倒な作業、または義務であると考えられています。