2016-09-23 86 views
0

我有一個工廠NewEditSvc我試圖分享共同的功能NewCtrlEditCtrl。我試圖做的一件事是從服務器內的服務器獲得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; 
    }); 

然後一切正常。我究竟做錯了什麼?

+0

您正在使用[本答案](http://stackoverflow.com/a/23803744/548997)中討論的顯式構造反模式。 – Lex

+0

我猜我不需要$ q。但是,仍然無法解決服務內部的承諾並將價值返還給控制器。 – mikeglaz

+0

反模式答案的要點是,您不應該解決服務中的承諾 - 您應該返回承諾並處理控制器中的解決方案。 – Lex

回答