Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在解决完成之前防止路由更改?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何在解决完成之前防止路由更改?

Javascript 如何在解决完成之前防止路由更改?,javascript,angularjs,Javascript,Angularjs,在更改路线之前,我如何等待我的服务完成加载?我的理解是,在$routeProvider中使用“resolve”可以实现这一点,但它对我不起作用。我使用的是Angular v1.2.1 以下是我的路由器的设置方式: angular.module('myApp', [ 'ngRoute' ]) .config(function ($routeProvider) { $routeProvider .when('/myRoute', { templ

在更改路线之前,我如何等待我的服务完成加载?我的理解是,在$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"
            }
        });
  });

ngResource方法不返回承诺,而是返回一个特殊的资源对象,它不等待请求完成。因此,在服务完成加载之前,您的路由会发生更改。 因此,在使用ngResource时,您需要使用$q服务手动创建、解析并返回承诺:

。。。
决心:{
MyVar:function(MyService,$q){
var deferred=$q.deferred();
返回MyService.query(函数(结果){
延迟。解决(结果);
});
回报。承诺;
}
}

完美!谢谢你的解释。