我正在查看Angular Lifecycle Hook的官方文档。令我感到困惑的是以下解释:
Angular的单向数据流规则禁止更新视图 编写完成后……将日志更新推迟一圈浏览器的JavaScript周期,就足够了。
禁止更新,因为页面已经呈现合理,但是为什么推迟更新才可以解决问题?滴答之后,视图是否仍会构成?
请像我5岁时向我解释。
答案 0 :(得分:0)
每次发生en事件(例如,当setTimeout的延迟已过去并且其回调函数已执行时),Angular都会启动更改检测并将相应的更改应用于DOM。
禁止的是,事件发生时不要更新组件的状态,也不要更新视图。禁止在已经检查过组件之后,在仍进行更改检测的同时更新组件的状态,从而更新它们的视图。
例如,如果您尝试在子组件的ngAfterViewChecked挂钩中修改父组件的状态,则会从Angular中收到一个错误,因为这是被禁止的:Angular刚刚检测到父和子组件的更改,并且您会在更改检测期间同步在父级中进行更改。另一方面,调用setTimeout()
可以安排以后的更改,然后将再次检测到该更改,并开始进行新的更改检测。