【发布时间】:2019-10-08 12:28:04
【问题描述】:
我正在开发一个组件,该组件具有一个用于切换布尔值的按钮。这个布尔值应该确定 HTML 中的子组件是否需要重新渲染,因为我希望重新运行子组件中的 ngOnInit 函数。
这里的app组件中描述了这种情况:https://codesandbox.io/s/angular-qxtm8
app.component 是父级,second.component 是子级。
我尝试了三种不同的解决方案。它们是onTestClickOne、onTestClickTwo 和onTestClickThree 在app.component.ts。 onTestClickOne 和onTestClickTwo 成功地重新触发了子组件中的ngOnInit。每当我单击相应的按钮时,我们可以看到控制台日志打印在控制台上。但是,onTestClickThree 没有用。
我不是 100% 确定为什么 onTestClickThree 不起作用,而 onTestClickTwo 起作用。
我的猜测如下:
onTestClickTwo有效,因为 Angular 中的更改检测是在事件处理程序执行后运行的。因此,它会检测到布尔值是否已设置为真。之后,事件循环会得到setTimeout的回调,并入栈。 Angular 会在回调结束后执行变更检测。onTestClickThree不起作用,因为当 Angular 运行更改检测时,布尔值已经为真。 Angular 不知道它已被更改。
【问题讨论】:
标签: javascript angular typescript