【问题标题】:How is change detection performed with Outputs in Angular 2?如何使用 Angular 2 中的输出执行更改检测?
【发布时间】:2017-07-17 07:31:07
【问题描述】:

假设我有一个带有输出绑定的父子组件:

<parent>
  <child (doStuffChild)="doStuff()"></child>
</parent>

用户点击导致doStuffChild.emit()

  1. 以下事件的顺序是什么:是否首先调用父级中的doStuff() 方法,然后从根开始进行更改检测?
  2. 父级中doStuff() 的调用是否也发生在单击启动的Zone.run() 内?
  3. 最终是否会因为点击导致zone.onTurnDone() 事件而发生更改检测?
  4. 调用哪些生命周期挂钩以及调用顺序是什么? (即 onChanges/doCheck 是否在父级或子级中调用?)
  5. 如果调用 ngOnChanges,为什么会发生这种情况?我认为 NgOnChanges 只会被要求输入。 (在阅读this article 之后,我假设 ngOnChanges 被调用)

如果我的问题太令人困惑,我很乐意澄清。

【问题讨论】:

    标签: angular


    【解决方案1】:
    1. 是的

    2. doStuff() 在 Angulars 根区域内运行,无需额外的 Zone.run()

    3. 发生更改检测是因为 Angular 知道 @Output()s 以及何时发出事件

    4. onChanges 不会被调用,因为没有 @Input() 被更改。在调用doStuff() 之后运行更改检测时运行ngDoCheck()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2016-03-26
      • 2016-12-13
      • 2017-06-30
      • 2017-09-18
      • 1970-01-01
      相关资源
      最近更新 更多