66

Angular 6 の最新リリースでは、サービスはprovidedInサービス メタデータのプロパティを使用してモジュールに登録されます。

@Injectable({
  providedIn: 'root',
})
export class HeroService {}

providersただし、ドキュメントでは、Angular 5 で行ったように、モジュール メタデータのモジュール配列にサービスを登録することについても言及しています。

@NgModule({
  providers: [HeroService],
})
export class AppModule {}

そう、

  • 注入するサービスをインジェクターに認識させるには、どのメソッドを使用する必要がありますか?
  • モジュールproviders配列メソッドは廃止されますか?
4

5 に答える 5

14

いつものように、複数のソリューションが利用できる場合、それは何を達成したいかによって異なります。ただし、ドキュメントには、選択するための指示がいくつかあります。

場合によっては、アプリケーションのルート インジェクターで常にサービスを提供することが望ましくないことがあります。おそらく、ユーザーはサービスの使用を明示的にオプトインするか、遅延ロードされたコンテキストでサービスを提供する必要があります。この場合、プロバイダは特定の に関連付ける必要があり、@NgModule classそのモジュールを含むインジェクタによって使用されます。

したがって、基本的にprovidedIn: 'root'は、アプリケーション全体のサービスに使用します。他のサービスについては、古いバージョンを引き続き使用してください。

異なる方法でサービスを提供する選択肢がすでにあることを忘れないでください。たとえば、コンポーネント レベルで Injectable を宣言することもできます (これは V6 でも変わりません)。

  @Component({
    selector: 'app-my-component',
    templateUrl: './my.component.html',
    providers: [ MyService ]
  })

このようにして、サービスはMyComponentとそのサブコンポーネント ツリーでのみ利用可能になります。

于 2018-05-07T07:09:02.570 に答える