2016-03-29 6 views
0

私はAngularjsに入っています。私は、機能を再利用したい、resetForm()機能です。私の質問は、私はまだ私のコントローラの中に入れて$scopeか、工場やサービスを作るのですか?どこに正規関数を置くのですか?Angularjs

app.controller('testController', [ 
     '$scope', 
     'testService', 
     function($scope, testService) { 

      $scope.addTestForm = function() { 
       var body = document.getElementsByTagName('body')[0]; 
       if (!body.classList.contains('test__add')) { 
        body.classList.add('test__add'); 
       } 
      }; 

      //do I add my function here? 
      function name() {}; 
     }]); 

答えて

0

もしそれがresetForm()の関数なら、私はそれがDOMを扱っていると仮定します。フォームフィールドをリセットするために$scopeにアクセスする必要があるので、あなたのコントローラ内でこの関数を宣言することをお勧めします(DOMの直接アクセスはAngularJSでは厳密に禁止されています)。あなたは、サンプルコードの下に

app.controller('testController', [ 
    '$scope', 
    'testService', 
    function($scope, testService) { 

     var resetForm = function() { 
      // your logic to reset form with help of $scope 
     }; 

     $scope.addTestForm = function() { 
      var body = document.getElementsByTagName('body')[0]; 
      if (!body.classList.contains('test__add')) { 
       body.classList.add('test__add'); 
      } 
     }; 

    }]); 

注を参照することができます:あなたはあなたのテンプレートファイルからそれをコールする予定がない場合$scope.resetFormとしてresetForm関数を宣言する必要はありません。

0

あなたが複数のコントローラを渡ってそれを再利用したい場合は、工場やサービスは、おそらく、コードの重複なしでそれを共有するための最良の方法です。すべてのコントローラからこれらのいずれか1つを呼び出すことができます。

このパターンに追加された利点は、コードを複製することから身を守るだけでなく、変数を保存してそれらを共有することもできます。

どちらもうまくいきますが、どちらを選択するかに問題がある場合は、Factory vs Serviceに関する興味深い議論を読むことができます。

0

事がこのように書き:この関数は、通常modelを操作すると、そのコントローラにのみ関連している場合

我々は、コントローラ内の関数を記述します。

は、私たちは、は、非同期API呼び出しからのようコントローラにデータを与えるため、通常のサービスを書き、共有データコントローラ間でため。

あなたの場合、ユーティリティ機能を使用する場合は、serviceを使用できますが、resetForm機能はコントローラ固有の機能です。一部のモデル値がクリアされるためです。将来的には、複雑なコードを生成する可能性のある条件と演算をその関数に追加したい場合があります。

サービスを使用してその機能が「変更されない機能に変更」されている場合は、適切な方法です。 (コードの再利用性とすべて)、それ以外の場合は、すべてのロジックを1か所にまとめておく方が良いでしょう。 (コントローラに書き込む)

関連する問題