如何在解析完成之前阻止路由更改?

时间:2013-11-22 15:47:47

标签: javascript angularjs

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

1 个答案:

答案 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;
  }
}