尝试管理对某些网址的访问权限。当我没有登录并尝试导航到主页时,它必须将我重定向到登录页面。 当我导航到主页时会发生这种情况' /' :在我的浏览器中,网址是#!/ login但是在ng-view中我获得了主视图而不是登录视图。 导航到登录和注册工作正常
var app = angular.module('todo', ['ngRoute']);
app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(false);
$locationProvider.hashPrefix('!');
$routeProvider
.when("/", {
controller: "homeController",
templateUrl: "app/partials/home.html",
requireAuth: true
})
.when("/login", {
controller: "loginController",
templateUrl: "app/partials/login.html",
requireAuth: false
})
.when("/signup", {
controller: "signupController",
templateUrl: "app/partials/signup.html",
requireAuth: false
})
.otherwise({ redirectTo: "/" });
}])
// Manage Access
.run(['$rootScope', '$location', 'authService', function($rootScope, $location, authService){
$rootScope.$on('$routeChangeStart', function(evt, next, current){
if((!authService.userInfo.isAuth)&&(next.requireAuth)){
$location.path('login');
}
})
}]);
答案 0 :(得分:1)
在Angular 1.3.0中,$location
事件期间能够更改$routeChangeStart
的行为已被更改。这是fixed in a more recent update,因此您可以更新到最新版本,也可以使用this workaround:
$rootScope.$on("$routeChangeStart", function (event, next, current) {
if ((!authService.userInfo.isAuth) && (next.requireAuth)) {
event.preventDefault();
$rootScope.$evalAsync(function() {
$location.path('/login');
});
}
});