我想知道在控制器调用任何查询之前是否可以使用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事先感谢您的帮助:)
最好的问候
答案 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