angularjs阻止控制器在解析之前执行查询

时间:2014-06-06 03:00:46

标签: angularjs authentication

我想知道在控制器调用任何查询之前是否可以使用routeProvider解析。

这里是代码的片段,它是从角度教程phonecat中修改的

PhoneCatApp.config(['$routeProvider','$httpProvider',
function($routeProvider,$httpProvider) {
    $httpProvider.defaults.withCredentials = true;
    $routeProvider.when('/phones', {
        templateUrl : 'partials/phone-list.html',
        controller : 'PhoneListCtrl',
        resolve: {
            a: function($q,$location){
                var def = $q.defer();
                def.resolve('a');
                $location.path('/login');
                return def.promise;
            }
        }
    }).when('/login', {
        templateUrl : 'partials/login.html',
        controller : 'PhoneDetailCtrl'
    }).otherwise({
                redirectTo : '/index';
        });
});

除了控制器仍然从PhoneServices执行Phone.query();

之外,所有工作都正常工作以将我的路由重定向到/ login

事先感谢您的帮助:)

最好的问候

1 个答案:

答案 0 :(得分:1)

在你的解析属性中,

resolve: {
            a: function($q,$location){
                var def = $q.defer();
                def.resolve('a');
                $location.path('/login');
                return def.promise;
            }
        }

它应该是这样的:

 resolve: {
                    a: function($q,$location){
                        var def = $q.defer();

                        // process any ajax here
                        // then evaluate the response if success or fail 
                        if( requestIsSuccessful ) {
                           def.resolve('a');
                        } else {
                           def.reject();
                        }
                        return def.promise;
                    }
            }

def.reject()将终止该进程。您可以创建一个HTTP拦截器来监听返回的状态代码,并在状态代码为401时重定向到登录页面。您也可以搜索HTTP拦截器..它位于angularjs docs