我确定已经回答了一千次,但我无法弄清楚为什么我只能在搜索后使用window.location.href
进行重定向。发生了什么事?
angular.module(..., [])
.config([..., function(...) {
/* Route Provider and ngRoute reference removed as per comment below */
$stateProvider
.state('login', {
url : '/login',
controller: 'loginCtrl',
templateUrl: '/login'
})
.state('home', {
url: '/',
templateUrl: '/views/index',
controller: 'HomeCtrl'
});
$locationProvider.html5Mode(true);
}
])
.run(['$state', '$rootScope', function ($state, $rootScope) {
$rootScope.$on('$stateChangeStart', function (e, toState, toParams, fromState, fromParams) {
if ($rootScope.username == null || $rootScope.password == null) {
if (toState.templateUrl == "/login") {
} else {
event.preventDefault();
$state.go("login");
}
}
});
}
]);
更新:StateChangeStart被调用两次,第二次是登录状态。控制台中没有抛出任何错误。我对角度很新,所以如果我做了一些严重错误的话,我可以接受任何建议。如果您需要任何其他代码(例如:控制器,服务),请告诉我,我会发布它。
但是,在显示欢迎页面时,即使用户名和密码为空,它仍会保留在欢迎页面上。在浏览器中输入/login
可按预期工作。
根据Angular $location.path not working:
/* snip */ else {
$rootScope.$apply(function () {
$location.path('login');
});
} /* snip */
给我一个错误:$digest already in progress
。
更多详情:
我刚刚发现,如果删除$locationProvider.html5Mode(true);
行,
加载页面时不调用stateChangeStart。
服务器是ASP.Net。
编辑2 看起来像angular实际上是登录页面了,但是不知道把它放在哪里?
答案 0 :(得分:0)
在角度使用的运行功能中:
$rootScope.$on('$stateChangeStart', function (event, toState) {
if (toState.name != 'login') {
$state.go('login');
event.preventDefault();
}
});
仅使用stateProvider设置路线。
按照此处的指导using AngularJS html5mode with nodeJS and Express
或在apache上:
https://ngmilk.rocks/2015/03/09/angularjs-html5-mode-or-pretty-urls-on-apache-using-htaccess/
为了在节点上正确设置角度js的html5 pushstate(如果那就是你在服务器上使用的那些)
答案 1 :(得分:0)
Click here并阅读我为验证问题所写的内容,或多或少是您可以发现有用的东西。