我不确定这是否是重复的,但我没有设法找到任何对我有用的东西,所以我发布了这个问题。承诺后的角度状态变化
我有一种情况,在将用户定向到某些路由之前,我需要从数据库获取值,以便我可以决定显示哪些内容。
如果我在$state.go(..)
之前移动e.preventDefault()
,那么它可以工作,但不正确。问题在于它开始加载默认状态,并且当它从http获得响应时,才会重定向到main.home
。因此,假设数据库请求需要2秒钟的时间,那么在重定向到main.home
之前需要2秒钟,这意味着用户会在大约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