我知道如何使用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
编辑:修改了我的“工作示例”以实际工作,因此可以将重点放在非工作部分;)
1
由于服务不应该代表组件发出事件,因为它会将服务与组件紧密耦合,这可能更多是设计问题。例如,如果组件有多个实例,在这种情况下它们都应该发出事件怎么办?
—
Angular University
@jhadesdev我读过你。我确实重新设计了解决方案,因此该服务不再需要发出结果。我仍然认为某些设计会因能够引发事件而
—
受益
然后一种方法是让组件创建事件发射器而不是服务,然后将事件发射器作为参数传递给服务
—
Angular University