我希望能够通过添加指令来修改组件行为。
<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)中“获胜”的最后一个。
Plunkr:https ://plnkr.co/edit/jdN9GaRTzoe7UQj2PIeP?p=preview
我的问题是,是否支持这种覆盖提供者,如果我至少可以依赖我的假设,指令提供的服务总是优先于组件提供的服务?