我想在事件发出和完成后执行一些其他代码。有没有办法像这样链接.next()块?
@Output() myEvent = new EventEmitter<string>();
this.myEvent.next({‘test string’}).onComplete(console.log('done');
答案 0 :(得分:2)
EventEmitter
是对RxJS Subject
的抽象(这是一个需要更改的主题),Subject
同时实现Observable
和Observer
。 next
不是运算符,可以在Observer
接口中看到next
没有返回值且无法链接。
对于上面的代码,EventEmitter
有emit
方法,而next
属于Subject
API,因此emit
应首选:< / p>
@Output() myEvent = new EventEmitter<string>();
this.myEvent.emit({‘test string’});
没有onComplete
方法,也没有必要。在组件销毁之前,输出应该保持不完整。
可以用
完成this.myEvent.subscribe(null, null, () => console.log('done'));
但这会导致额外的订阅。所有销毁逻辑都应该进入相应的生命周期钩子:
ngOnDestroy() {
console.log('done');
}
答案 1 :(得分:0)
不,没有办法从发出事件的组件中监视这个,因为这应该是“火与忘记”。
你可以做的是定义另一个@Input-值,一旦“事件后动作”完成,它就会被父组件发出。如果你监控这个,你肯定知道什么时候开始跟进。