ディレクティブを追加して、コンポーネントの動作を変更できるようにしたいと考えています。
<demo>Basic behaviour</demo>
<demo dira>Modified behaviour</demo>
私のアプローチは、コンポーネントによって提供され、コンポーネントに提供されるサービスクラスで動作を定義することです。ディレクティブには独自のサービス プロバイダーがあるため、コンポーネントのプロバイダーをオーバーライドします。
@Component({
selector: "demo",
providers: [SampleService]
})
export class DemoComponent{
constructor( private sampleService: SampleService) {
}
}
@Directive({
selector: "[dira]",
providers: [ {provide:SampleService, useClass:SpecialSampleService}]
})
export class DirADirective {
}
これは機能しますが、同じトークンでサービスを提供する複数のディレクティブがある場合に何が起こるかについてのルールを見つけることができません:
<demo dira dirb></demo>
私の観察では、ディレクティブからのプロバイダーは、コンポーネントからのプロバイダーよりも常に優先されるようです。ディレクティブの間では、「勝つ」のは常に宣言配列 (HTML ではなく) の最後のものです。
プランク: https://plnkr.co/edit/jdN9GaRTzoe7UQj2PIeP?p=preview
私の質問は、この種のプロバイダーのオーバーライドがサポートされているかどうか、そして少なくとも私の仮定に頼ることができれば、ディレクティブによって提供されるサービスは常にコンポーネントによって提供されるサービスよりも優先されるということです?