### 9.3. 業務處理
簡單來說,當一個錨點路由定義被匹配時,會根據模板生成一個 _$scope_ ,同時相應的一個 controller 就會被觸發。最后模板的結果會被填充到 _ng-view_ 中去。
從上面的例子中可以看到,最直接的方式,我們可以在模板中雙向綁定數據,而數據的來源,在 controller 中控制。在 controller 中,又可以使用到像 _$scope_ , _$routeParams_ 這些服務。
這里先提一下另外一種與錨點路由相關的服務, _$route_ 。這個服務里錨點路由在定義時,及匹配過程中的信息。比如我們搞怪一下:
angular.module('ngView', [],
function($routeProvider){
$routeProvider.when('/a',
{
template: '{{ title }}',
controller: function($scope){
$scope.title = 'a';
}
}
);
$routeProvider.when('/b',
{
template: '{{ title }}',
controller: function($scope, $route){
console.log($route);
$route.routes['/a'].controller($scope);
}
}
);
}
);
回到錨點定義的業務處理中來。我們可以以字符串形式寫模板,也可以直接引用外部文件作為模板:
angular.module('ngView', [],
function($routeProvider){
$routeProvider.when('/test',
{
templateUrl: 'tpl.html',
controller: function($scope){
$scope.title = 'a';
}
}
);
}
);
_tpl.html_ 中的內容是:
{{ title }}
這樣的話,模板可以預定義,也可以很復雜了。
現在暫時忘了模板吧,因為前面提到的,當前 _ng-view_ 不能有多個的限制,模板的渲染機制局限性還是很大的。不過,反正會觸發一個 controller ,那么在函數當中我們可以盡量地干自己喜歡的事:
angular.module('ngView', [],
function($routeProvider){
$routeProvider.when('/test',
{
template: '{{}}',
controller: function(){
$('div').first().html('<b>OK</b>');
}
}
);
}
);
那個空的 _template_ 不能省,否則 controller 不會被觸發。
- Introduction
- 關于AngularJS
- 關于本文檔
- 開始的例子
- 依賴注入
- 作用域
- 數據綁定與模板
- 數據->模板
- 模板->數據
- 數據->模板->數據->模板
- 模板
- 定義模板內容
- 內容渲染控制
- 節點控制
- 事件綁定
- 表單控件
- 模板中的過濾器
- 排序 orderBy
- 過濾列表 filter
- 其它
- 例子:表頭排序
- 例子:搜索
- 錨點路由
- 路由定義
- 參數定義
- 業務處理
- 定義模板變量標識標簽
- AJAX
- HTTP請求
- 廣義回調管理
- 工具函數
- 上下文綁定
- 對象處理
- 類型判定
- 其它服務
- 日志
- 緩存
- 計時器
- 表達式函數化
- 模板單獨使用
- 自定義模塊和服務
- 模塊和服務的概念與關系
- 定義模塊
- 定義服務
- 引入模塊并使用服務
- 附加模塊 ngResource
- 使用引入與整體概念
- 基本定義
- 基本使用
- 定義和使用時的占位量
- 實例
- AngularJS與其它框架的混用(jQuery, Dojo)
- 自定義過濾器
- 自定義指令directive
- 指令的使用
- 指令的執行過程
- 基本的自定義方法
- 屬性值類型的自定義
- Compile的細節
- transclude的細節
- 把節點內容作為變量處理的類型
- 指令定義時的參數
- Attributes的細節
- 預定義的 NgModelController
- 預定義的 FormController
- 示例:文本框
- 示例:模板控制語句 for
- 示例:模板控制語句 if/else