雙向綁定是新的前端框架中頻繁出現的一個新詞匯,也是mvvm的核心原理。angularjs五條核心信念中的數據驅動,便是由雙向綁定進行完成。
那么什么是雙向綁定,下面簡單進行講解。
首先我們要理解數據綁定。我們看到的網站頁面中,是由數據和設計兩部分組合而成。將設計轉換成瀏覽器能理解的語言,便是html和css主要做的工作。而將數據顯示在頁面上,並且有一定的交互效果(比如點擊等用戶操作及對應的頁面反應)則是js主要完成的工作。很多時候我們不可能每次更新數據便刷新頁面(get請求),而是通過向后端請求相關數據,並通過無刷新加載的方式進行更新頁面(post請求)。那么數據進行更新后,頁面上相應的位置也能自動做出對應的修改,便是數據綁定。
在以前的開發模式中,這一步一般通過jq操作DOM結構,從而進行更新頁面。但這樣帶來的是大量的代碼和大量的操作。如果能在開始的時候,便已經確定好從后端獲取的數據到頁面上需要進行的操作,當數據發生改變,頁面的相關內容也自動發生變化,這樣便能極大地方便前端工程師的開發。在新的框架中(angualr,react,vue等),通過對數據的監視,發現變化便根據已經寫好的規則進行修改頁面,便實現了數據綁定。可以看出,數據綁定是M(model,數據)通過VM(model-view,數據與頁面之間的變換規則)向V(view)的一個修改。
而雙向綁定則是增加了一條反向的路。在用戶操作頁面(比如在Input中輸入值)的時候,數據能及時發生變化,並且根據數據的變化,頁面的另一處也做出對應的修改。有一個常見的例子就是淘寶中的購物車,在商品數量發生變化的時候,商品價格也能及時變化。這樣便實現了V——M——VM——V的一個雙向綁定。
具體的代碼實現通常用到以下幾個ng指令:
ng-model:將一個DOM節點的值與一個angular中的變量進行綁定,當DOM節點值發生修改的時候變量也會隨之修改。
ng-bind:將angular中的變量顯示到頁面中。
{{}}:與ng-bind功能相同,區別在於頁面未完全渲染完之前模板語言會直接顯示在頁面中,可通過在html標簽中加上ng-cloak解決這一問題。
