1. 程式人生 > >理解angular2.0雙向資料繫結中的 $event

理解angular2.0雙向資料繫結中的 $event

app/hero-form.component.html (excerpt)

<inputtype="text"class="form-control"id="name"required
       [ngModel]="model.name"name="name"
       (ngModelChange)="model.name = $event">
  TODO: remove this: {{model.name}}


這個屬性繫結看起來很眼熟,但事件繫結看起來有點怪。

ngModelChange並不是<input>元素的事件。 它實際上是來自NgModel

指令的事件屬性。 當 Angular 在表單中看到[(x)]的繫結目標時, 它會期待這個x指令有一個名為x的輸入屬性,和一個名為xChange的輸出屬性。

模板表示式中的另一個古怪之處是model.name = $event。 之前看到的$event物件來自 DOM 事件。 但ngModelChange屬性不會生成 DOM 事件 —— 它是Angular EventEmitter型別的屬性,當它觸發時, 它返回的是輸入框的值 —— 也正是希望賦給模型name屬性的值。

很高興知道這些,但是這樣現實嗎?實踐上中,幾乎總是優先使用[(ngModel)]形式的雙向繫結。 只有當需要在事件處理函式中做一些特別的事情(例如合併或限制按鍵頻率)時,才會拆分出獨立的事件處理函式