2016-09-22 19 views
0

私は3つの状態(ui-routerを使用)で料金を作成し編集する小さなアプリを持っています:index、new、edit。 NewとEditは同じ機能をほとんど同じようにしているので、コードを2回使用する代わりに、サービスにアウトソースする必要があります。問題は、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データにアクセスするために追加するので、サービスで私のオブジェクトを公開しないことを好む。あなたは本当にあなたにたい場合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

FeeService.myFeeを公開でしたが、$ scope.feeRule.multiplierは、フォーム上のモデルをngのために設定されています。フォーム上で変更するたびに設定する必要がありますか? – mikeglaz

+0

いいえ。初期化すると、オブジェクト 'feeRule'にバインドされます。あなたが話しているフォームコードを表示できますか? – Nix

+0

私は何が起こっているのか理解していると思います... – mikeglaz

関連する問題