如何在没有解决的情况下将数据加载到服

时间:2013-12-13 12:52:14

标签: javascript angularjs promise

我想从服务器获取一些数据并在路由更改完成之前将其复制到服务:

when(
  '/detail/:id', 
  {
    templateUrl: './partials/views/detail.php',
    controller: 'detailCtrl',
    resolve: {
      init: function($route,$q,shipmentn){
        var deffered = $q.defer();

        shipmentn.getSingle($route.current.params.id).then(function(promise){
          shipmentn.data = promise.data;
          deffered.resolve(promise);
        });

        return deffered.promise;
      }
    }
  }
)

正如您所看到的,我在then()函数中执行此操作以确保请求已完成。

困扰我的是,我必须向我的控制器注入另一个依赖项(init),并且必须返回一个从未使用过的promise。

我怎么能避免这个?

2 个答案:

答案 0 :(得分:1)

如果您只想将数据发送到控制器,则无需将其存储在服务中,只需将其解析为控制器:

路由器:

when('/detail/:id', {templateUrl: './partials/views/detail.php',   controller: 'detailCtrl',resolve: {

            shipment: function($route,$q,shipmentn){
                return shipmentn.getSingle($route.current.params.id));
            }

        }})

服务:

getSingle: function(id){
 var deferred = q.defer();

 $http.get(...).then(function(response){
  deferred.resolve(response.data);
 }

 return deferred.promise;
}

控制器:

module.controller('detailController', ['shipment', function(shipment){
 ...
}]);

在控制器上,发货将是http.get中的response.data返回的任何内容。

答案 1 :(得分:1)

技巧可能是在服务本身完成加载后,将控制器中所需的服务传递给deferred对象的resolve函数:

when('/detail/:id', {
  templateUrl: './partials/views/detail.php',   
  controller: function($scope,service){}, //<-- Controller with the service dependency
  resolve: {
    service: function($route,$q,shipmentn){
      var deffered = $q.defer();       
      shipmentn.getSingle($route.current.params.id).then(function(promise){
        shipmentn.data = promise.data;
        deffered.resolve(shipmentn); //<-- the deffered resolves the service
      });
      return deffered.promise;
    }
}})

问候