Предположим, что у меня есть компонентная директива Angular 2, где я хочу, чтобы вложенная зависимость, которую компонент использует, определяется с помощью @Input().
Я хочу написать что-то вроде <trendy-directive use="'serviceA'">
и использовать этот экземпляр TrendyDirective для использования serviceA, или использовать его serviceB, если это то, что я указываю. (это упрощенная версия того, что я на самом деле пытаюсь сделать)
(Если вы считаете, что это ужасная идея для начала, я открыт для этой обратной связи, но, пожалуйста, объясните, почему.)
Вот один пример того, как достичь того, о чем я думаю. В этом примере представьте, что ServiceA и ServiceB - это инъекции, которые реализуют iService с помощью функции superCoolFunction.
@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 no such thing as a " + this.use + '!';
}
this.service.superCoolFunction();
}
}
Я думаю, что это технически будет работать, но должен быть лучший способ сделать динамическую инъекцию зависимостей.