0
我有一個工廠NewEditSvc
我試圖分享共同的功能NewCtrl
和EditCtrl
。我試圖做的一件事是從服務器內的服務器獲得feeParameters
,但這不起作用。爲什麼不承諾在服務中解決?
angular.module('feeSuitesApp')
.factory('NewEditSvc', function($q, FeeTypesSvc){
var _feeParameters = {};
function getParameters(){
return _feeParameters;
}
function setParameters(feeType){
var promise = $q(function(resolve, reject){
FeeTypesSvc.resource.get({id: feeType.id, association: 'fee_parameters'}).
$promise.then(function(data){
resolve(data);
}, function(error){
reject(error);
})
});
promise.then(function(data){
_feeParameters = data.master;
});
}
return {
getParameters: getParameters,
setParameters: setParameters
}
});
angular.module('feeSuitesApp')
.controller('NewCtrl', function(NewEditSvc, feeType){
$scope.feeParameters = NewEditSvc.getParameters();
$scope.feeType = feeType;
$scope.setParameters = function(feeType){
NewEditSvc.setParameters(feeType);
};
$scope.setParameters($scope.feeType);
});
在我的最後一行$scope.feeParameters
沒有設置。但是,如果我從NewEditSvc.setParameters返回promise
變量(),然後在我的NewCtrl
我做到以下幾點:
var promise = $scope.setParameters($scope.feeType);
promise.then(function(data){
$scope.feeParameters = data.master;
});
然後一切正常。我究竟做錯了什麼?
您正在使用[本答案](http://stackoverflow.com/a/23803744/548997)中討論的顯式構造反模式。 – Lex
我猜我不需要$ q。但是,仍然無法解決服務內部的承諾並將價值返還給控制器。 – mikeglaz
反模式答案的要點是,您不應該解決服務中的承諾 - 您應該返回承諾並處理控制器中的解決方案。 – Lex