### 6.1. 數據->模板
數據到表現的綁定,主要是使用模板標記直接完成的:
<p>{{ w }} x {{ h }}</p>
使用 _{{ }}_ 這個標記,就可以直接引用,并綁定一個作用域內的變量。在實現上, ng 自動創建了一個 _watcher_ 。效果就是,不管因為什么,如果作用域的變量發生了改變,我們隨時可以讓相應的頁面表現也隨之改變。我們可以看一個更純粹的例子:
<p id="test" ng-controller="TestCtrl">{{ a }}</p>
<script type="text/javascript">
var TestCtrl = function($scope){
$scope.a = '123';
}
angular.bootstrap(document.documentElement);
上面的例子在頁面載入之后,我們可以在頁面上看到 `123` 。這時,我們可以打開一個終端控制器,輸入:
$('#test').scope().a = '12345';
$('#test').scope().$digest();
上面的代碼執行之后,就可以看到頁面變化了。
對于使用 ng 進行的事件綁定,在處理函數中就不需要去關心 _$digest()_ 的調用了。因為 ng 會自己處理。源碼中,對于 ng 的事件綁定,真正的處理函數不是指定名字的函數,而是經過 _$apply()_ 包裝過的一個函數。這個 _$apply()_ 做的一件事,就是調用根作用域 _$rootScope_ 的 _$digest()_ ,這樣整個世界就清凈了:
<p id="test" ng-controller="TestCtrl" ng-click="click()">{{ a }}</p>
<script type="text/javascript" charset="utf-8">
var TestCtrl = function($scope){
$scope.a = '123';
$scope.click = function(){
$scope.a = '456';
}
}
angular.bootstrap(document.documentElement);
那個 _click_ 函數的定義,綁定時變成了類似于:
function(){
$scope.$apply(
function(){
$scope.click();
}
)
}
這里的 _$scope.$apply()_ 中做的一件事:
$rootScope.$digest();
- Introduction
- 關于AngularJS
- 關于本文檔
- 開始的例子
- 依賴注入
- 作用域
- 數據綁定與模板
- 數據->模板
- 模板->數據
- 數據->模板->數據->模板
- 模板
- 定義模板內容
- 內容渲染控制
- 節點控制
- 事件綁定
- 表單控件
- 模板中的過濾器
- 排序 orderBy
- 過濾列表 filter
- 其它
- 例子:表頭排序
- 例子:搜索
- 錨點路由
- 路由定義
- 參數定義
- 業務處理
- 定義模板變量標識標簽
- AJAX
- HTTP請求
- 廣義回調管理
- 工具函數
- 上下文綁定
- 對象處理
- 類型判定
- 其它服務
- 日志
- 緩存
- 計時器
- 表達式函數化
- 模板單獨使用
- 自定義模塊和服務
- 模塊和服務的概念與關系
- 定義模塊
- 定義服務
- 引入模塊并使用服務
- 附加模塊 ngResource
- 使用引入與整體概念
- 基本定義
- 基本使用
- 定義和使用時的占位量
- 實例
- AngularJS與其它框架的混用(jQuery, Dojo)
- 自定義過濾器
- 自定義指令directive
- 指令的使用
- 指令的執行過程
- 基本的自定義方法
- 屬性值類型的自定義
- Compile的細節
- transclude的細節
- 把節點內容作為變量處理的類型
- 指令定義時的參數
- Attributes的細節
- 預定義的 NgModelController
- 預定義的 FormController
- 示例:文本框
- 示例:模板控制語句 for
- 示例:模板控制語句 if/else