所以我有两个组件--就它们在组件层次结构中的位置而言,一个就像另一个组件的第三个移除的祖父母--我希望在它们之间传递数据。我认为这样做的方法是编写这样的服务:
@Injectable()
export class DataService {
dataChange: EventEmitter<any> = new EventEmitter<any>();
constructor() {}
change(data){
this.dataChange.next(data)
}
}
}
然后在这两个组件上订阅它,并在它们试图传递数据时调用change函数。不过,Angular2似乎不喜欢这种情况,只是忽略了通过订阅获得的任何内容。我的控制台记录了订阅,它们被“订阅”并打开。
我可以通过调用组件本身并使用jQuery或普通Javascript来操作DOM,从而对此进行修改,但是我不能为组件本身设置值,因为Angular2也不喜欢这样做,而且只会删除所有订阅。
如何以Angular2的方式在两个远程组件之间传递数据?
编辑:打开的问题在这里:https://github.com/angular/angular/issues/15856
发布于 2017-04-10 00:42:35
有关更好的答复,请参见Github问题:
所以我所做的是错误的--我把服务作为提供者放在两个组件中,但是我需要做的是把服务作为提供者放在组件层次结构的顶端--在我的例子中是app.component.ts。
然后,只需将服务导入到这两个组件中(而不让它们提供程序)。
发布于 2017-04-09 23:27:01
至少在使用服务方面,您是在正确的轨道上。棱角文档编写得很好,可以在这里找到:https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service
doc的标题意味着父-子关系,但是只要服务被注入到两个组件中,它就应该以相同的方式工作。
https://stackoverflow.com/questions/43312920
复制相似问题