2016-09-22 38 views
0

我有一個小應用程序,它使用三種狀態(使用ui-router)創建和編輯費用:索引,新建,編輯。新的和編輯幾乎相同的功能,所以不是代碼兩次,我想將它外包給一個服務。問題是當我嘗試在newCtrl或editCtrl中修改綁定到$ scope的變量時。例如,兩者都有此功能:

$scope.removeFeeRule = function(){ 
    $scope.feeParameter = null; 
    $scope.feeRule.multiplier = null;  
    $scope.feeRule.addend = null; 
    $scope.feeRule.fee_suite_id = null; 
    $scope.feeRule.fee_parameter_id = null; 
} 

如何避免此代碼重複並將其轉移到服務中?

回答

1

簡單的服務來管理費用。我寧願刪除設置爲空值。我也不想在服務中暴露我的對象,所以我通常添加一個get er來訪問數據。如果你真的想你可能暴露FeeService.myFee VS FeeService.getFee()

angular.module('yourmodule') 
    .service('FeeService', FeeService) 
    .controller('MyController', MyController); 

function FeeService(){ 
    this.reset = reset; 
    this.getFee = getFee; 

    var _currentFee = {}; 
    function getFee(){ 
     return _currentFee; 
    } 

    function reset(){ 
     delete _currentFee.feeParameter = null; 
     delete _currentFee.multiplier = null; 
     delete _currentFee.addend = null; 
     delete _currentFee.fee_suite_id = null; 
     delete _currentFee.fee_parameter_id = null; 
     return _currentFee; 
    } 
} 

function MyController($scope, FeeService){ 


    $scope.removeFeeRule = removeFeeRule; 


    init(); 

    function init(){ 
     $scope.myFee = FeeService.getFee(); 

    } 

    function removeFeeRule(){ 
     FeeService.reset(); 

    } 

} 
+0

但是$ scope.feeRule.multiplier設定爲NG-模型的形式。每次在表單上更改時,我是否必須設置它? – mikeglaz

+0

否。一旦它被初始化,它將被綁定到對象'feeRule'你能告訴我你正在談論的表單代碼嗎? – Nix

+0

我想我正在理解發生了什麼...... – mikeglaz

相關問題