2017-09-17 16 views
1

AngularJSでオーバーライドするコントローラに問題があります。それはUiCoreControllerから呼び出されますが、calculatePremium()は、より記述UiAskController::calculatePremium()によって呼び出されていない - 私は(ng-changeディレクティブで)テンプレートからvalidatePremium()メソッドを呼び出すとAngularJSのメソッド多型/継承1.6

function UiCoreController($scope, ...) { 
     'use strict'; 

     angular.extend(vm, { 
      validatePremium: validatePremium 
    } 

     function validatePremium() { 
      console.log('validate premium in core controller'); 
      // validation logic 
      vm.calculatePremium(); 
     } 

     function calculatePremium() { ... } 
    } 

function UiAskController($rootScope, $scope, $controller) { 
    'use strict'; 

    var vm = this; 
    var core = $controller('UiCoreController', { $scope: $scope }); 

    angular.extend(this, core); 

    angular.extend(vm, { 
     ... 
    } 
    function calculatePremium() { ... } 
} 

は、ここで問題にしています。

validatePremium()の全文をUiAskControllerにコピーして貼り付けた場合にのみ動作しますが、コードの複製が好きなようです。

誰でもJavaのようなコードでcalculatePremium()への呼び出しを達成するのに役立つでしょうか?

答えて

1

JavascriptはJavaのようなOOPではないため、多態性や継承はありません。したがって、短い答えはで、です。コントローラーだけを使って、あなたが望むものを達成することはできません。関数calculatePremiumはコントローラスコープにバインドされているため、コントローラ間でスコープを共有しないようにしてください。

あなたは私がサービスにvm.calculatePremium()ロジックを置く$rootScopeにこの方法を記述したが、そのことをお勧め


ことができます。このようなものを作る正しい場所です。

コントローラの主な目的は、データをDOMにバインドすることです。スコープを使用してビューをレンダリングします。 Service以来

は、私がサービスに置くことについて読んだあなたは、コードの重複を避けるために、サービスで行うと

+0

コードの保守を簡単に作ることができ、すべてのデータ操作シングルトンであるが、それでも私はで問題を解決する方法を知っていただきたいと思います主な話題。 – mlewandowski

+0

@mlewandowskiよく、ポリモルフィズムの同様の動作を探しているならば。 Javaのような継承 - 短い答え - いいえ。私は答えを更新した –