如何使用Angular 2中的输出执行更改检测?

时间:2017-02-26 19:16:10

标签: angular

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

<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被调用)
  6. 我很高兴澄清我的问题,如果它太混乱了。

1 个答案:

答案 0 :(得分:2)

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

  2. 发生更改检测是因为Angular了解@Output()以及何时发出事件

  3. onChanges将不会被调用,因为没有更改@Input()。在ngDoCheck()被调用

  4. 之后运行更改检测时,会运行doStuff()