我在课堂上对 EventEmitter 有一个奇怪的问题。虽然我有一些想法可以解决这个问题,但我想问你是否有想法直接解决我的问题。
简短的摘要
我有一个父组件和一个子组件。当子组件中的某些内容发生更改时,父组件希望得到通知。
在孩子内部,我们有一个按钮。单击时,它会执行修改数据的 http 请求。在subscribe
代码部分,我想通知父类已经做了一些事情。
这打破了这个想法并按预期工作:https ://stackblitz.com/edit/angular-l7hafr
问题
在我的应用程序中,来自子组件的事件只要在请求中完成就永远不会subscribe
发出http
。如果我之前(在订阅函数之外)发出事件,它会按预期工作。
我试过的
我试图找出原因。问题是我根本无法隔离问题。上面的 Stackblitz 按预期工作,而在我的应用程序中几乎没有。
与此问题相关的其他帖子建议.emit()
在 NgZone 跑步者中执行,如下所示:
this.ngZone.run(() => {
console.log(NgZone.isInAngularZone());
this.dataHasChanged.emit();
});
我在订阅回调中实现了这个,但结果是控制台日志true
,但测试事件仍然没有发出。
这怎么可能?我能做些什么?
编辑
所以我终于能够隔离这个问题,并在这个非常小的例子中得到了证明:https ://stackblitz.com/edit/angular-46pndy
所有问题的原因都在getter
数组中。为什么这会在这里造成问题?