角度5中的“刻度线”是什么意思

Pun*_*nit 4 javascript angular

我在浏览组件交互部分时正在学习 Angular 5 我遇到了这部分

// Redefine `seconds()` to get from the `CountdownTimerComponent.seconds` ...
// but wait a tick first to avoid one-time devMode
// unidirectional-data-flow-violation error
setTimeout(() => this.seconds = () => this.timerComponent.seconds, 0);
Run Code Online (Sandbox Code Playgroud)

我浏览了文档,也在网上我试图找到没有关于这个主题的明确解释。有人可以解释一下吗

  1. 这是什么勾?
  2. 为什么我们需要它??
  3. 什么是单向数据流违规错误?
  4. settimeout 如何阻止它?
  5. 还有什么办法可以防止吗??

Gün*_*uer 5

1) Atick只是将任务(执行函数)添加到浏览器事件队列中,用于延迟(异步)执行而不是同步执行。

2) 允许浏览器在执行新代码之前先执行事件队列中的待处理任务。

3) 一些异步执行更新模型,Angular 识别出异步执行已完成并运行更改检测。更改检测本身会导致模型更改(例如,视图绑定中使用的属性或函数正在修改模型)。模型只允许在某些异步执行期间修改,但不允许在更改检测期间修改。

4)通过将代码执行添加到浏览器事件队列而不是立即执行,它允许完成更改检测,然后仅在浏览器执行我们放入队列的任务时异步执行更新模型 setTimeout

5)ChangeDetectorRef.detectChanges()在模型更新后强制执行另一个更改检测轮,这通常可以防止错误。