我想提交一个http请求,以检查每次路由更改时用户是否已登录。 这是最新版本的角度(1.4.5)。
我的路线是这样的:
// configure routes
app.config(['$routeProvider', function($routeProvider){
$routeProvider
// route for the home page
.when('/', {
templateUrl : 'directives/about.html',
controller : 'mainController'
})
// route for the home page
.when('/login', {
templateUrl : 'directives/login.html',
controller : 'loginContoller'
})
// route for the about page
.when('/about', {
templateUrl : 'directives/about.html',
controller : 'aboutController'
})
// route for the contact page
.when('/contact', {
templateUrl : 'directives/contact.html',
controller : 'contactController'
});
}]);
答案 0 :(得分:2)
如果你看the docs,你会看到when()
方法需要什么参数。
route
文章是一个对象,一个属性称为resolve
。
resolve属性是应该解析的依赖关系的映射。
$routeProvider.when('/', {
templateUrl: 'directives/about.html',
controller: 'mainController',
resolve: {
loginCheck: function (myLoginCheckService) {
return myLoginCheckService();//could return a $q.promise object.
}
}
});
resolve
- 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。如果成功解析了所有promise,则会注入已解析的promise的值,并触发$routeChangeSuccess
事件。如果任何承诺被拒绝,则会触发$routeChangeError
事件。
AngularJS文档
答案 1 :(得分:1)
创建辅助方法
function auth(configs){
// write your auth code here
return configs;
}
路由器就是这样。
.when('/', auth({
templateUrl : 'directives/about.html',
controller : 'mainController'
}))
答案 2 :(得分:1)
可以通过在Angularjs
的运行块中添加routeChangeStart来实现app.run(function($rootScope, $location) {
$rootScope.$on( "$routeChangeStart", function(event, next, current) {
if ($rootScope.loggedInUser == null) {
// no logged user, redirect to /login
if ( next.templateUrl === "partials/login.html") {
} else {
$location.path("/login");
}
}
});
});