Page 359 - AngularJS权威教程
P. 359
25.3 ui-router 339
template: '<h1>Hello {{ name }}</h1>' 19
});
2. controller
20
和ngRoute一样,你可以给已经注册好的控制器关联一个URL(使用字符串),也可以创建一
个控制器函数作为状态控制器。
21
如果没有定义模板(使用上述方式之一),就不会创建这个控制器。
3. resolve 22
我们还可以使用resolve功能解析要注入到控制器中的依赖列表。在ngRoute中,resolve选
项允许你在路由被真实渲染之前解析promise。在angular-route内,对于可以如何使用这个选项 23
更自由。
这个resolve选项就是一个对象,其中键就是要注入到控制器中的依赖名称,而其值就是待 24
解析的factories。
如果传入一个字符串,angular-route会尝试匹配一个现有的已注册的服务。如果传入一个 25
函数,则注入这个函数,而函数的返回值就是依赖。如果这个函数返回一个promise,它会在控
制器被实例化之前解析,同时其值(就像ngRoute)会注入到控制器中。
26
$stateProvider.state('home', {
resolve: {
// 当结果不是promise时立即返回 27
person: function() {
return {
name: "Ari",
email: "ari@fullstack.io" 28
}
},
// 这个函数返回一个promise,它会在控制器实例化之前解析 29
currentDetails: function($http) {
return $http({
method: 'JSONP',
url: '/current_details' 30
});
},
// 还可以在另一个解析中使用上面返回的promise 31
facebookId: function($http, currentDetails) {
$http({
method: 'GET',
url: 'http://facebook.com/api/current_user', 32
params: {
email: currentDetails.data.emails[0]
} 33
});
}
},
controller: function($scope. person, currentDetails, facebookId) { 34
$scope.person = person;
}
}); 35
4. url
url选项可以给应用程序的状态分配一个唯一的URL。这个url选项提供了与深度链接同样的 36