Javascript 如何在没有解析的情况下将数据加载到服务中
我想在routechange完成之前从服务器获取一些数据并将其复制到服务: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
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()在做什么?