2014年6月27日 星期五

AngularJS 教學 - Data Binding

在 AngularJS 教學 - Controller and View 文章中我們介紹了 Controller 和 View 之間的關係

其中一個在 AngularJS 內相當重要的觀念就是 Data Binding (資料繫結)

在 AngularJS 的官網也有特別說明到這一點,這也是 AngularJS 相當重要的特點之一

其中 Data Binding 可以分為 One-Way 以及 Two-Way,當然 AngularJS 是建議你使用 Two-Way

先從 Onw-Way Data Binding 開始說起吧

















One -Way Data Binding 的目的在於要產生 View 之前,會將定義好的樣版(Template)與

樣版內對應的模型(Model)做合併(merge)的動作,再呈現在 View 上面,但其缺點在於



如果經過一些操作之後,如果 Model 的改變了,View 上面原本的 Model 資料並不會隨著改變

接下來是 Two-Way Binding:



















說穿了,Two-Way Data Binding 就是在改進上述 One-Way Data Binding 的缺點,

從上圖我們可以看到 AngularJS 會先對 Template 進行編譯的動作,並產生 View

在執行期間,只要 Model 或是 View 上面的資料進行更動,就會更新另一方

而 AngularJS 就是利用標準的 Javascript Events 去接收 View 上的改變,並透過 $scope

來進行 Model 的修改

在  AngularJS 教學 - Controller and View  有提供一個簡單的範例了,這邊就不多說


最後我介紹幾種 AngularJS 的 Data Binding 方式


  1. {{name}} Expression 是最簡單最快的方式
  2. ng-model="name" 則是建立一個 Two-way Binding 的方式之一
  3. ng-bind="name" 將 model 資料繫結當作 innerText 繫結到 HTML 標籤內
  4. ng-bind-template="User: {{name}}" 直接將樣板建立到 HTML 標籤內
  5. ng-non-bindable 不做任何 Data Binding

底下給一個範例,大家參考看看吧


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" ng-app="demoApp">
     <head>
         <title>Bootstrap Examples</title>
         <script type="text/javascript" src="js/angular.min.js"></script>
         <script>
              var demoApp = angular.module("demoApp", []);
              demoApp.controller("demoCtrl", function($scope){
                  $scope.data = ["A", "B", "C"];
                  $scope.add = function(){
                     $scope.data.push("D");
                  };
             });
         </script>
     </head>
     <body>
         <div ng-controller="demoCtrl">
              Count: {{data.length}} <br/>
              Count: <font ng-bind="data.length"></font> <br/>
              <font ng-bind-template="Count: {{data.length}}"></font><br/>
              Count: <input type="text" ng-model="data.length"/><br/>
              Count: <font ng-non-bindable>{{data.length}}</font><br/>
              <button ng-click="add()">Add</button>
         </div>
     </body>
</html>








沒有留言:

張貼留言