【发布时间】:2017-02-24 11:57:47
【问题描述】:
我一直在学习 Angular 2 双向绑定,并且我已经整理了一个演示,它将一个组件的属性绑定到另一个包含组件的属性,以及几个文本字段。不幸的是,对我来说,其中很多都像是magic,这使得当魔法不起作用时调试起来非常困难。特别是,演示揭示了几个我还没有完全理解绑定的地方;这个问题是关于这个主题的几个问题中的第一个。
(演示在http://plnkr.co/edit/IUTy5p?p=preview,以防你想在家里跟着...)
代码实现了一个具有pName 字符串属性的父组件和一个具有cName 属性的包含子组件。使用香蕉盒语法将父属性双向绑定到子属性:
<child [(cName)]="pName"></child>
子元素内部是cName 属性的显示,以及三个文本输入,每个都以某种方式绑定到cName 属性。第二个文本输入在这里很重要:
<input type="text" [ngModel]="cName" (ngModelChange)="cNameChange.emit($event)">
ngModelChange 事件在 EventEmitter 上调用 emit() 方法,其名称 cNameChange 派生自 cName 属性的名称:
@Output() public cNameChange:EventEmitter<String> = new EventEmitter<String>();
因此,如果您编辑第二个文本输入的值,则子项的 cName 属性会更改,其他两个文本输入项的值会更改,而父项的 pName 属性会更改。
但是,如何?
这可以分为两个相关的问题:
- 发出该事件如何更改
cName属性? - 更改子级的
cName属性会如何最终更改父级的pName属性?
【问题讨论】:
标签: javascript angular data-binding properties