【发布时间】:2015-09-16 20:23:27
【问题描述】:
我知道如何使用 EventEmitter 引发事件。如果我有这样的组件,我还可以附加一个要调用的方法:
<component-with-event (myevent)="mymethod($event)" />
当我有这样的组件时,一切都很好。我将一些逻辑移到了服务中,我需要从服务内部引发一个事件。我所做的是:
export class MyService {
myevent: EventEmitter = new EventEmitter();
someMethodThatWillRaiseEvent() {
this.myevent.next({data: 'fun'});
}
}
我有一个组件需要根据此事件更新一些值,但我似乎无法使其工作。我尝试的是这样的:
//Annotations...
export class MyComponent {
constructor(myService: MyService) {
//myService is injected properly and i already use methods/shared data on this.
myService.myevent.on(... // 'on' is not a method <-- not working
myService.myevent.subscribe(.. // subscribe is not a method <-- not working
}
}
当引发事件的服务不是组件时,如何让 MyComponent 订阅事件?
我在 2.0.0-alpha.28
编辑:将我的“工作示例”修改为实际工作,因此可以将重点放在不工作的部分;)
【问题讨论】:
-
这可能更多是设计问题,因为服务不应代表组件发出事件,因为这将服务与组件紧密耦合。例如,如果组件有多个实例,在这种情况下它们是否都应该发出事件?
-
@jhadesdev 我读到你了。我确实重新设计了解决方案,因此服务不再需要发出结果。我仍然认为一些设计会从能够引发事件中受益——这取决于它是什么样的“服务”......
-
一种方法是让组件创建事件发射器而不是服务,然后将事件发射器作为参数传递给服务
标签: javascript angular