前言
終於來到資料繫結的第四種方法 - 雙向繫結 ( Two-way Binding ) 了,而這種繫結方式跟其他三種有何不同呢?
雙向繫結 ( Two-way Binding )
到目前為止介紹了三種資料繫結的方法,分別是內嵌繫結、屬性繫結、事件繫結,這三種的前兩種都是屬於從 Component 單向將資料傳送到 Template 的繫結方式。而事件繫結也算是單向的繫結方式,這是從 Template 內透過瀏覽器的事件觸發之後呼叫 Component 內的方法。
而我們這次要介紹的繫結方式就是雙向的繫結方式,這種繫結方式會自動的做到屬性繫結與事件繫結,也因此我們寫的程式碼會更少、更精簡。
拿上一篇的練習改寫,使其具有雙向繫結效果
我們將之前的練習改寫,見識見識雙向繫結的威力。
template
1 | <div class="widget-content"> |
要使用雙向繫結的話辦法相當簡單,使用
[(ngModel)]
語法後面接一個想要雙向繫結並且在 component 內的屬性即可。
component
1 | import { Component } from '@angular/core'; |
當運行開發伺服器後會發現, Angular 又掛掉了。
意思就是 Angular 看不懂 ngModel 這個屬性是什麼。
也就是說如果我們想要使用雙向繫結,還有一個步驟要做,那就是把 Angular 表單的模組匯入到 AppModule 內。
於是打開 AppModule 這支檔案進行修改
1 | import { BrowserModule } from '@angular/platform-browser'; |
修改完成後,再次運行開發伺服器,發現可以成功運行網頁了,但我們還需要調整程式碼的部分。
可以透過內嵌繫結,測試一下剛才設置的雙向繫結 inputValue
有沒有成功
template
1 | <div class="widget-content"> |
藉由這個測試知道,目前這個 input 的輸入框跟 component 內的 inputValue
已經建立了雙向繫結。
完成這個練習
我們已經成功地建立了雙向繫結,接著把其他地方的程式碼也修改一下吧。
template
1 | <div class="widget-content"> |
component
1 | import { Component } from '@angular/core'; |
搞定!最後運行開發伺服器,測試功能是否仍然正常。
雙向繫結不是萬靈丹
雙向繫結既然這麼好用,我們是不是應該不管怎麼樣都使用雙向繫結呢?
事實上,過度濫用雙向繫結也會給網頁效能造成一些負擔,可能導致網頁的反應會變慢,但具體來說還是得看實際狀況而定就是了。
小結
到這裡我們已經學會了 Angular 內四種資料繫結的方式了,接下來要介紹的是範本參考變數。