我正在进行Ionic项目,希望在解决方案服务传递到控制器 >在我的路由器上。但是,控制器不接收对象。事实上,这是一个ascynchronous操作,我认为,我的服务返回发生在promisse返回之前。我该如何解决这个问题?
由于
我在 app.js 中有一条路线。
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', {
url: '/',
templateUrl: 'templates/home.html',
controller: 'MainCtrl as vm',
resolve: {
weather: function(MyService) {
return MyService.getData();
}
});
$urlRouterProvider.otherwise('/');
});
服务在此处:
.factory('MyService', function($http) {
var data = {};
$http.get('http://something.api?format=json')
.then(
function(res) {
data = res.data;
},
function(err) {
data = err.status;
});
return {
getData: function() {
return data;
}
}
});
最后,我的控制器是......
.controller('MainCtrl', function(weather) {
var vm = this;
vm.weather = weather;
});
答案 0 :(得分:2)
您可以在服务的getData()函数中为天气数据发出$ http请求,并从函数返回$ http promise。
.factory('MyService', function($http) {
function getData() {
return $http.get('http://something.api?format=json')
.then(function(res) {
return res.data;
});
}
return {
getData: getData
};
});
现在,您可以从路线定义中的解决方案返回此承诺,就像您完成它一样。