在更改路线之前,如何在服务完成加载之前进行角度等待?我的理解是在$ routeProvider中使用'resolve'可以实现这一点,但它对我不起作用。我正在使用Angular v1.2.1。
以下是我的路由器设置方式:
angular.module('myApp', [
'ngRoute'
])
.config(function ($routeProvider) {
$routeProvider
.when('/myRoute', {
templateUrl: 'myTemplate.html',
controller: 'MyCtrl',
resolve: {
MyVar: function(MyService) {
return MyService.query();
}
}
})
...
这是我的服务:
angular.module('myApp')
.factory('MyService', function MyService($resource) {
return $resource("/api/example/:id",
{
id: "@id"
},
{
query: {
method: "GET"
},
get: {
method: "GET"
},
update: {
method: "PUT"
},
delete: {
method: "DELETE"
}
});
});
答案 0 :(得分:2)
ngResource方法不返回promise,而是返回不等待请求完成的特殊资源对象。因此,您的路线会在服务加载完成之前更改。 因此,在使用ngResource时,您需要使用$ q service手动创建,解析并返回一个promise:
...
resolve: {
MyVar: function(MyService, $q) {
var deferred = $q.defer();
return MyService.query(function(results){
deferred.resolve(results);
});
return deferred.promise;
}
}