我有一个工厂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;
});
那么一切都正常了。我做错了什么?
问题是,你没有在setParameters中返回你的承诺。https://docs.angularjs.org/api/ng/service/q/美元
添加return promise
。