### 6.3. 數據->模板->數據->模板
現在要考慮的是一種在現實中很普遍的一個需求。比如就是我們可以輸入數值,來控制一個矩形的長度。在這里,數據與表現的關系是:
- 長度數值保存在變量中
- 變量顯示于某個 input 中
- 變量的值即是矩形的長度
- input 中的值變化時,變量也要變化
- input 中的值變化時,矩形的長度也要變化
當然,要實現目的在這里可能就不止一種方案了。按照以前的做法,很自然地會想法,綁定 _input_ 的 _change_ 事件,然后去做一些事就好了。但是,我們前面提到過 _ng-model_ 這個東西,利用它就可以在不手工處理 _change_ 的條件下完成數據的展現需求,在此基礎之上,我們還需要做的一點,就是把變化后的數據應用到矩形的長度之上。
最開始,我們面對的應該是這樣一個東西:
<div ng-controller="TestCtrl">
<div style="width: 100px; height: 10px; background-color: red"></div>
<input type="text" name="width" ng-model="width" />
</div>
<script type="text/javascript" charset="utf-8">
var TestCtrl = function($scope){
$scope.width = 100;
}
angular.bootstrap(document.documentElement);
</script>
我們從響應數據變化,但又不使用 _change_ 事件的角度來看,可以這樣處理寬度變化:
var TestCtrl = function($scope, $element){
$scope.width = 100;
$scope.$watch('width',
function(to, from){
$element.children(':first').width(to);
}
);
}
使用 _$watch()_ 來綁定數據變化。
當然,這種樣式的問題,有更直接有效的手段, ng 的數據綁定總是讓人驚異:
<div ng-controller="TestCtrl">
<div style="width: 10px; height: 10px; background-color: red" ng-style="style">
</div>
<input type="text" name="width" ng-model="style.width" />
</div>
<script type="text/javascript" charset="utf-8">
var TestCtrl = function($scope){
$scope.style = {width: 100 + 'px'};
}
angular.bootstrap(document.documentElement);
</script>
- Introduction
- 關于AngularJS
- 關于本文檔
- 開始的例子
- 依賴注入
- 作用域
- 數據綁定與模板
- 數據->模板
- 模板->數據
- 數據->模板->數據->模板
- 模板
- 定義模板內容
- 內容渲染控制
- 節點控制
- 事件綁定
- 表單控件
- 模板中的過濾器
- 排序 orderBy
- 過濾列表 filter
- 其它
- 例子:表頭排序
- 例子:搜索
- 錨點路由
- 路由定義
- 參數定義
- 業務處理
- 定義模板變量標識標簽
- AJAX
- HTTP請求
- 廣義回調管理
- 工具函數
- 上下文綁定
- 對象處理
- 類型判定
- 其它服務
- 日志
- 緩存
- 計時器
- 表達式函數化
- 模板單獨使用
- 自定義模塊和服務
- 模塊和服務的概念與關系
- 定義模塊
- 定義服務
- 引入模塊并使用服務
- 附加模塊 ngResource
- 使用引入與整體概念
- 基本定義
- 基本使用
- 定義和使用時的占位量
- 實例
- AngularJS與其它框架的混用(jQuery, Dojo)
- 自定義過濾器
- 自定義指令directive
- 指令的使用
- 指令的執行過程
- 基本的自定義方法
- 屬性值類型的自定義
- Compile的細節
- transclude的細節
- 把節點內容作為變量處理的類型
- 指令定義時的參數
- Attributes的細節
- 預定義的 NgModelController
- 預定義的 FormController
- 示例:文本框
- 示例:模板控制語句 for
- 示例:模板控制語句 if/else