此語法:
[(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