Javascript 如何在解决完成之前防止路由更改?
在更改路线之前,我如何等待我的服务完成加载?我的理解是,在$routeProvider中使用“resolve”可以实现这一点,但它对我不起作用。我使用的是Angular v1.2.1 以下是我的路由器的设置方式:Javascript 如何在解决完成之前防止路由更改?,javascript,angularjs,Javascript,Angularjs,在更改路线之前,我如何等待我的服务完成加载?我的理解是,在$routeProvider中使用“resolve”可以实现这一点,但它对我不起作用。我使用的是Angular v1.2.1 以下是我的路由器的设置方式: angular.module('myApp', [ 'ngRoute' ]) .config(function ($routeProvider) { $routeProvider .when('/myRoute', { templ
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"
}
});
});
ngResource方法不返回承诺,而是返回一个特殊的资源对象,它不等待请求完成。因此,在服务完成加载之前,您的路由会发生更改。 因此,在使用ngResource时,您需要使用$q服务手动创建、解析并返回承诺:
。。。
决心:{
MyVar:function(MyService,$q){
var deferred=$q.deferred();
返回MyService.query(函数(结果){
延迟。解决(结果);
});
回报。承诺;
}
}
完美!谢谢你的解释。