假設我有一個Angular 2組件指令,其中我希望組件使用的注入依賴由@Input()確定。基於@Input的角度2動態依賴注入()
我想寫一些類似<trendy-directive use="'serviceA'">
的東西,並讓TrendyDirective的實例使用serviceA,或者讓它使用serviceB(如果這是我指定的)。 (這是什麼實際上,我試圖做一個過於簡化版本)
(如果你認爲這是一開始就有一個可怕的想法,我接受這些反饋,但請解釋原因。)
下面是如何實現我所想的一個例子。在這個例子中,假設ServiceA和ServiceB是通過具有'superCoolFunction'來實現iService的注入。
@Component({
selector: 'trendy-directive',
...
})
export class TrendyDirective implements OnInit {
constructor(
private serviceA: ServiceA,
private serviceB: ServiceB){}
private service: iService;
@Input() use: string;
ngOnInit() {
switch (this.use){
case: 'serviceA': this.service = this.serviceA; break;
case: 'serviceB': this.service = this.serviceB; break;
default: throw "There's no such thing as a " + this.use + '!';
}
this.service.superCoolFunction();
}
}
我認爲這在技術上是可行的,但是有一個更好的方法來做動態依賴注入。
由於4.0'get'已被棄用。 –
我的意思是簽名。請參閱https://github.com/angular/angular/blob/5.2.5/packages/core/src/di/injector.ts#L62 –
使用類型調用泛型方法總是更好。我不確定這個簽名是否會被刪除。它可以讓用戶知道使用泛型更好。無論如何,我更新了答案,感謝您的關注。通常我不打擾徹底輸入解決方案,並專注於提供它的要點。 – estus