此语法:
[(ngModel)]="expression"
是由编译器解开成
[ngModel]="expression" (ngModelChanged)="expression=$event"
这意味着:
- 有施加到元件(输入)一个ngModel指令
- 通过ngModel结合本ngModel指令采用的
expression
参数
- 有一个输出(事件)
ngModelChanged
现在你可以看到[ngModel]
部分总是有它,你会注意到同步值下降。
当您指定(ngModel)="c()"
时会发生什么很有趣。通常,(...)
语法适用于事件。因此,我们确实角度识别出这事件,并创建在component view factory适当的听众:
function (_v, en, $event) {
var ad = true;
var _co = _v.component;
...
if (('ngModel' === en)) {
var pd_4 = (_co.c() !== false);
ad = (pd_4 && ad);
}
return ad;
}
然而,所有(...)
元素也被解析为属性,所以它会在ngModel
指令选择匹配:
selector: '[ngModel]:not([formControlName]):not([formControl])'
所以Angular也会初始化ngModel
指令类作为指令。但是,由于它没有通过[...]
语法定义的任何输入绑定,因此在更改检测期间将跳过此伪指令。而且因为ngModel
的事件ngModel
指令没有被定义,所以使用(ngModel)
将没有副作用并且是没有意义的。
它的单向绑定去其他方式 – Plog
嘿,有什么不清楚[我的回答](https://stackoverflow.com/a/46123215/2545680)? –
不知道,谢谢你的解释。这正是我想知道的! – mbucks