1. 程式人生 > >angularjs的雙向繫結詳解

angularjs的雙向繫結詳解

雙向資料繫結可能是AngularJS最實用的特性,將MVC的原理展現地淋漓盡致。
AngularJS的工作原理是:

  1. HTML頁面的載入,這會觸發載入頁面包含的所有JS (包括 AngularJS)

  2. AngularJS啟動,搜尋所有的指令(directive)

  3. 找到ng-app,搜尋其指定的模組(Module),並將其附加到ng-app所在的元件上。

  4. AnguarJS遍歷所有的子元件,查詢指令和bind命令

  5. 每次發現ng-controller或者ng-repeart的時候,它會建立一個作用域(scope),這個作用域就是元件的上下文。作用域指明瞭每個DOM元件對函式、變數的訪問權。

  6. AngularJS然後會新增對變數的監聽器,並監控每個變數的當前值。一旦值發生變化,AngularJS會更新其在頁面上的顯示。

  7. AngularJS優化了檢查變數的演算法,它只會在某些特殊的事件觸發時,才會去檢查資料的更新,而不是簡單地在後臺不停地輪詢。

它雙向繫結的操作如下:

資料 (M)→ 介面(V):控制器(C)僅僅負責在編譯時在scope物件上建立檢視物件vm,檢視物件和模板的繫結則是由 scope負責管理的。

介面(V) → 資料(M):介面的操作可以觸發我們控制器(C)裡定義的方法,從而改變資料(M).再通過上面的M→ V繫結回檢視
結合下面的這個例項,詳細解釋雙向繫結(例項來自匯智網Angular進階教程)

控制器對scope的影響
ng-controller指令總是建立一個新的scope物件,而且只在頁面載入時執行一次:
這裡寫圖片描述


初始化$scope物件

var ezControllerClass = function($scope){
    //view model
    $scope.vm = {
        sb : {
            name : "Jason Stantham",
            gender : "male",
            age : 48,
            career : "actor",
            photo : "http://b.hiphotos.baidu.com/baike/w%3D268/sign=a03742145bee3d6d22c680cd7b176d41/359b033b5bb5c9eae4c45250d739b6003af3b34a.jpg"
} }; }; angular.module("ezstuff",[]) .controller("ezController",ezControllerClass);

利用上面的程式碼我們將檢視模型初始化

最後,向cope物件新增方法
業務模型是動態的,在資料之外,我們需要給業務模型新增動作。
雖然控制器只加載一次,但我們可以在控制器中定義一些方法來改變資料模型,從而改變檢視。
在之前建立的業務模型上,我們建立一個方法:shuffle,這個方法負責 從一個小型的名人庫中隨機的選擇一個名人來更新模型的sb屬性:
這裡寫圖片描述
通過在button上使用ng-click指令,我們將模型的shuffle方法繫結到了滑鼠點選 事件上。試著用滑鼠點選【shuffle】按鈕,我們的模型將從庫裡隨機的選出一個 名人,顯示在視圖裡。