【发布时间】:2014-10-05 09:36:31
【问题描述】:
我在登录时设置会话,然后在重置会话时阻止调用 LoginCtrl。
我有一个路由设置,如果调用任何未定义的路由,它需要到/login 但是为了避免登录时出现这种情况,我正在使用以下代码进行重定向,这似乎不起作用
我也在使用event.preventDefault();,但没有用。
LoginCtrl 是不可停止的,无论 $location.path() 被更改为其他控制器,它仍然会被执行。
app.run(['$rootScope', '$location', 'SessionService', function ($rootScope, $location, sessionService) {
$rootScope.$on('$routeChangeStart', function (event, next) {
// if((next.redirectTo == '/login' || next.originalPath == '/login') && sessionService.isLogin()){
if((next.templateUrl == 'views/login.html') && sessionService.isLogin()){
event.preventDefault();
$location.path('/settings/resetpassword');
return;
}
});
}]);
下面是LoginCtrl。
angular.module('myApp')
.controller('LoginCtrl', function ($scope, $location, loginService, SessionService, ShowApiErrors) {
$scope.init = function () {
SessionService.resetMySession();
};
$scope.init();
});
路由器:-
$routeProvider
.when('/', {
redirectTo: '/login'
})
....
.otherwise({
redirectTo: '/login'
});
【问题讨论】:
-
你可以在定义
route参数时添加resolve属性和promise,并在需要时拒绝promise。$routeChangeError将被解雇。
标签: angularjs angularjs-scope angularjs-service angularjs-routing