【发布时间】:2019-12-06 22:34:49
【问题描述】:
我在看Angular Lifecycle Hook的官方文档。让我困惑的是以下解释:
Angular 的单向数据流规则禁止更新视图 完成后......将日志更新推迟一圈浏览器的JavaScript周期,这已经足够长了。
因为页面已经渲染而禁止更新听起来很合理,但是为什么推迟更新可以解决问题呢?不是打勾后视图还在合成吗?
请像我 5 岁一样向我解释。
【问题讨论】:
我在看Angular Lifecycle Hook的官方文档。让我困惑的是以下解释:
Angular 的单向数据流规则禁止更新视图 完成后......将日志更新推迟一圈浏览器的JavaScript周期,这已经足够长了。
因为页面已经渲染而禁止更新听起来很合理,但是为什么推迟更新可以解决问题呢?不是打勾后视图还在合成吗?
请像我 5 岁一样向我解释。
【问题讨论】:
每次发生 en 事件(例如,当 setTimeout 的延迟已经过去,并且它的回调函数被执行时),Angular 都会启动更改检测并相应地将必要的更改应用于 DOM。
当事件发生时,禁止更新组件的状态,从而更新视图。禁止在已经检查过变更检测的同时更新组件的状态,从而更新它们的视图。
例如,如果您尝试在子组件的 ngAfterViewChecked 挂钩中修改父组件的状态,您将收到来自 Angular 的错误,因为这是禁止的:Angular 刚刚检测到父组件和子组件的更改,并且您在更改检测期间同步地在父级中进行更改。另一方面,调用setTimeout() 会安排稍后的更改,并且将再次检测到该更改,并开始新的更改检测。
【讨论】: