Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在没有解析的情况下将数据加载到服务中_Javascript_Angularjs_Promise - Fatal编程技术网

Javascript 如何在没有解析的情况下将数据加载到服务中

Javascript 如何在没有解析的情况下将数据加载到服务中,javascript,angularjs,promise,Javascript,Angularjs,Promise,我想在routechange完成之前从服务器获取一些数据并将其复制到服务: when( '/detail/:id', { templateUrl: './partials/views/detail.php', controller: 'detailCtrl', resolve: { init: function($route,$q,shipmentn){ var deffered = $q.defer(); ship

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

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
)注入我的控制器,并且必须返回一个从未使用过的承诺


如何避免这种情况?

如果您只希望向控制器发送数据,则无需将其存储在服务中,只需将其解析到控制器即可:

module.controller('detailController', ['shipment', function(shipment){
 ...
}]);
路由器:

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返回的任何内容。

一个技巧可能是在服务本身完成加载后,将控制器中所需的服务传递给延迟对象的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;
    }
}})
when('/detail/:id'{
templateUrl:'./partials/views/detail.php',

控制器:函数($scope,service){},//这有什么用?在服务中缓存一个值?@第四,我用它来获取将在视图中显示的数据。基本思想是提供通过服务显示的完整数据。我知道这一点。但是,由于数据必须是全局可访问的,我更喜欢将其存储在服务中,因为这正是我想要的ted,我接受这个。谢谢:)想了一会儿,我想知道它为什么会工作。内部发生了什么,没有任何参数调用resolve()时,resolve()在做什么?