在任何状态加载之前,我需要解决一个http调用。
angular.module('myModule', [])
.run(function($http, MyFactory) {
$http.get('/api..')
.success(function(data){
MyFactory.setData(data);
//Store data in a service
});
})
.config(function($stateProvider) {
$stateProvider
.state('main', {...})
.state('main.app'{
url: '/app'
resolve: {
data: function(MyFactory) {
MyFactory.getData();
// This block needs to be run after my $http call in 'run' has been resolved.
return ..
}
}
}
});
.factory('MyFactory', function () {
var data = '';
return {
setData: function(_data) {
data = _data
},
getData: function() {
return data;
}
}
};
我曾尝试将$http
作为我的第一个状态.main
的解析器,但是如果直接进入.main.app
,则会在第二个解析器之后执行第一个解析器。
.run
函数中调用此函数,而是从工厂本身进行ajax
调用,并且执行该ajax
的方法将返回一个承诺。因此,该方法将从state
的resolve
中调用,并从resolve
返回该promise
。 - Pankaj Parkar