组件可以根据其输入提供服务(或可提供的服务)吗?在我的情况下,我的组件使用基于另一个firebase服务的服务,我希望组件为子提供新的firebase服务,因此其他服务将只访问db中的子部分。
在我目前的解决方案中,我的组件调用服务的setChild函数来设置孩子,但我很好奇是否有可能以上述方式。
谢谢, 塔马斯
答案 0 :(得分:2)
不,那是不可能的。当评估装饰器参数时,还没有组件的实例。
您可以做的是将服务注入到添加到提供程序的组件中,并将值传递给服务。当孩子也注入相同的服务时,他们共享相同的值:
@Injectable()
class MyService {
...
}
@Component({
selector: 'parent',
template: 'x'
providers: [MyService],
)}
class Parent {
@Input() someInput;
constructor(private myService:MyService) {
}
ngOnChanges() {
this.myService.sharedValue = this.someInput;
}
}
@Component({
selector: 'descendant',
template: 'x'
)}
class Descendant {
constructor(myService:MyService) {
myService.sharedValueChange.subscribe(val => {
console.log(val);
});
}
}
有关使用Observable
创建共享服务以通知更改的更多详细信息,请参阅Delegation: EventEmitter or Observable in Angular2