Я уверен, что на это ответили тысячу раз, но я не могу понять, почему я могу только перенаправлять, используя 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 Похоже, что угловой фактически получает страницу входа в систему, но не знает, куда ее поместить?
Я уверен, что вы смешиваете собственные модули 'ngRoute' и' UI-Router' Angular. – muenchdo
Место event.preventDefault(); после вашего перенаправления, а также использовать $ state.go ('login') и удалить $ location.path ('login'); – XGreen
@XGreen Итак, вы имеете в виду '$ rootScope. $ Apply (function() {$ state.go (" login "); event.preventDefault();});'? Кажется, не имеет никакого эффекта - остается на домашней странице без ошибок. – David