Page 121 - AngularJS权威教程
P. 121
12.3 路由 101
controller: function($scope) {}
1
如果配置对象中设置了controller属性,那么这个指定的控制器会与路由所创建的新作用
域关联在一起。如果参数值是字符型,会在模块中所有注册过的控制器中查找对应的内容,然后 2
与路由关联在一起。如果参数值是函数型,这个函数会作为模板中DOM元素的控制器并与模板
进行关联。
3
2. template
template: '<div><h2>Route</h2></div>'
4
AngularJS会将配置对象中的HTML模板渲染到对应的具有ng-view指令的DOM元素中。
3. templateUrl 5
templateUrl: 'views/template_name.html'
6
应用会根据templateUrl属性所指定的路径通过XHR读取视图(或者从$templateCache中读
取)。如果能够找到并读取这个模板,AngularJS会将模板的内容渲染到具有ng-view指令的DOM
元素中。 7
4. resolve
8
resolve: {
'data': ['$http', function($http) {
return $http.get('/api').then( 9
function success(resp) { return response.data; },
function error(reason) { return false; }
);
}]; 10
}
如果设置了resolve属性,AngularJS会将列表中的元素都注入到控制器中。如果这些依赖是 11
promise对象,它们在控制器加载以及$routeChangeSuccess被触发之前,会被resolve并设置成一
个值。
12
列表对象可以是:
键,键值是会被注入到控制器中的依赖的名字; 13
工厂,即可以是一个服务的名字,也可以是一个返回值,它是会被注入到控制器中的函
数或可以被resolve的promise对象。
14
在上面的例子中,resolve会发送一个$http请求,并将data的值替换为返回结果的值。列
表中的键data会被注入到控制器中,所以在控制器中可以使用它。
15
5. redirectTo
redirectTo: '/home' 16
// 或者
redirectTo: function(route,path,search)
如果redirectTo属性的值是一个字符串,那么路径会被替换成这个值,并根据这个目标路 17
径触发路由变化。
如果redirectTo属性的值是一个函数,那么路径会被替换成函数的返回值,并根据这个目 18