提供Angular 2 Component变量

时间:2016-03-31 07:58:13

标签: angularjs typescript angular

组件可以根据其输入提供服务(或可提供的服务)吗?在我的情况下,我的组件使用基于另一个firebase服务的服务,我希望组件为子提供新的firebase服务,因此其他服务将只访问db中的子部分。

在我目前的解决方案中,我的组件调用服务的setChild函数来设置孩子,但我很好奇是否有可能以上述方式。

谢谢, 塔马斯

1 个答案:

答案 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