我想从服务器获取一些数据并在路由更改完成之前将其复制到服务:
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。
我怎么能避免这个?
答案 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;
}
}})
问候