我想在发出并完成事件后执行其他代码。有没有办法将.next((块链接?
@Output() myEvent = new EventEmitter<string>();
this.myEvent.next({‘test string’}).onComplete(console.log('done');
EventEmitter
是rxjs Subject
上的抽象(这是更改的主题(,而 Subject
同时实现了 Observable
和 Observer
。next
不是操作员,可以在Observer
接口中看到next
没有值,不能链接。
至于上述代码,EventEmitter
具有emit
方法,而next
属于Subject
API,因此emit
应该优选:
@Output() myEvent = new EventEmitter<string>();
this.myEvent.emit({‘test string’});
没有onComplete
方法,也不需要它。输出应该保持不完整直到零件破坏为止。
可以用
完成this.myEvent.subscribe(null, null, () => console.log('done'));
,但这将导致其他订阅。所有销毁逻辑都应该转到各自的生命周期钩子:
ngOnDestroy() {
console.log('done');
}
否,没有办法从发出事件的组件中监视这一点,因为这应该是"火与忘记"。
您可以做的是定义另一个 @input-value,该 @input-value在完成"事后动作"后立即发出。如果您监视此操作,您肯定知道何时开始后续操作。