Angular2单向数据流

Shi*_*nka 1 dataflow angular

Angular 2支持单向数据流,如果有人可以解释或提供一些资源的参考资料,可以通过图解详细解释单向数据流.

Gün*_*uer 8

父母对孩子

Angular2只使用此绑定语法从父级到子级进行单向数据绑定

// child
@Input() childProp;
Run Code Online (Sandbox Code Playgroud)
<!-- parent -->
[childProp]="parentProp"
Run Code Online (Sandbox Code Playgroud)

这些绑定由Angular2的更改检测更新.

孩子到父母

从子级到父级的更改由输出发出的事件传播,与更改检测无关.

// child
@Output() childPropChanged = new EventEmitter();

clickHandler() {
  this.childPropChange.emit('someValue');
}
Run Code Online (Sandbox Code Playgroud)
<!-- parent -->
(childPropChange)="parentProp = $event"
Run Code Online (Sandbox Code Playgroud)

在事件或另一个异步调用完成后再次调用Angulars更改检测.

单向数据流

单向数据流意味着变化检测不会导致循环.从根组件向叶组件执行变化检测,并且当更新所有叶组件时,完成变化检测循环.

prodMode/DEVMODE

当更改检测本身导致更改时,则devMode中会抛出错误(另请参阅Angular2中的生产和开发模式之间有什么区别?),这会阻止违反单向数据流.

双向绑定

Angular2中没有真正的双向绑定.双向绑定语法

[(childProp)]="parentProp"
Run Code Online (Sandbox Code Playgroud)

只是语法糖将上面显示的父对子和子对父组合绑定到单个绑定.

  • 因为child-to-parent不是值绑定,而是事件绑定.数据绑定仅更新父对子并完成.通过事件绑定,可以从子级更新父级,但这不是由更改检测驱动的.这基本上是使数据绑定单向的原因.这允许更改检测更有效地工作.例如,在Angular1中,有可能从子项更新父项导致在子项上更新绑定,导致父项更新...这在Angular2中不是问题 (4认同)