如何做一个控制器等待从服务发送的响应throutout一个解决?

时间:2016-01-28 17:38:29

标签: angularjs ionic-framework

我正在进行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;
});

1 个答案:

答案 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
    };
});

现在,您可以从路线定义中的解决方案返回此承诺,就像您完成它一样。