我在登录时设置会话,之后我阻止调用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'
});
答案 0 :(得分:2)
经过一些更加努力的谷歌搜索后,我发现this url它告诉我应该使用$locationChangeStart
它能够立即停止执行,然后重定向回到我想要的路线。
$rootScope.$on('$locationChangeStart', function (event, next) {
if(next.match('/login') && sessionService.isLogin()){
$location.path('/after-login-path');
}
});
答案 1 :(得分:0)
在LoginCtrl下,为什么在注销之前不检查用户是否已登录。或任何其他阻止用户注销的情况。据我所知,你不能阻止控制器执行。
angular.module('myApp')
.controller('LoginCtrl', function ($scope, $location, loginService, SessionService, ShowApiErrors) {
$scope.init = function () {
if(!SessionService.isLogin()) {
SessionService.resetMySession();
}
};
$scope.init();
});