Я не уверен, что это дубликат или нет, но мне не удалось найти что-то, что сработало для меня, поэтому я отправляю этот вопрос.Угловое изменение состояния после обещания
У меня возникла ситуация, когда мне нужно получить значения из базы данных, прежде чем направлять пользователя на определенные маршруты, чтобы я мог решить, какой контент показывать.
Если я переведу e.preventDefault()
прямо перед $state.go(..)
, тогда это работает, но не правильно. Проблема в том, что он начинает загружать состояние по умолчанию и когда получает ответ от http, только затем перенаправляет его на main.home
. Итак, скажем, если запрос db занимает примерно 2 секунды, то требуется 2 секунды, прежде чем перенаправить на main.home
, что означает, что пользователь видит контент, на который он не должен находиться примерно на 2 секунды.
Есть ли способ предотвратить дефолт в начале изменения состояния и перенаправить пользователя в конце изменения состояния? Кроме того, если мы можем предотвратить дефолт в начале изменения состояния, то как мы можем продолжить состояние по умолчанию?
(function(){
"use strict";
angular.module('app.routes').run(['$rootScope', '$state', '$http', function($rootScope, $state, $http){
/* State change start */
$rootScope.$on('$stateChangeStart', function(e, to, toParams, from, fromParams){
e.preventDefault();
$http
.get('/url')
.error(function(err){
console.log(err);
})
.then(function(response){
if(response.data === 2){
// e.preventDefault()
$state.go('main.home');
}
// direct to default state
})
}
}]);
});
Спасибо, он прекрасно работает. (Я думаю, вы должны ввести $ q также в свой пример) – Timo