-2

私の質問はベストプラクティス+より効率的です。 Link関数内で$ scopeを使用する関数を実装するか、それを外部に実装して$ scopeを渡しますか?

angular.module('exampleModule', []) 
    .directive('exampleDirective', ['$http', 
     function ($http) { 
      return { 
       restrict: 'EA', 
       scope: { 
        ... 
       }, 
       link: function ($scope, element, attr) { 
        /* Implement here? */ 
        function myFunc(){ 
         /* do some calc using $scope*/ 
        } 
       }, 
       templateUrl: "..." 
      } 

      /** 
      * Assistant Functions 
      */ 
      /* Implement here? */ 
       function myFunc($scope){ 
        /* do some calc using $scope*/ 
       } 
     }]); 
+0

外で実装すると、コードが読みにくくなってしまいます。ちょうどそれをリンク関数の中に入れて、それを読んでいる人は何が起こっているのかを理解してください。 – Fissio

+0

この質問は全く意味がありません。サンドイッチにはどのようなマヨネーズが必要ですか? – lin

答えて

0

あなたは一番下の関数を定義し、ちょうどその関数への参照を与え、それが元のために になるとき、その関数はすべての引数を受け取ることになりますことができます。

angular.module('exampleModule', []) 
    .directive('exampleDirective', ['$http', 
     function ($http) { 
      return { 
       restrict: 'EA', 
       scope: { 
        ... 
       }, 
       link: myFunc, // just the reference to the function to be invoked 
       templateUrl: "..." 
      } 

      //link function 
      function myFunc($scope, element, attr){ 
       /* do some calc using $scope*/ 
       $scope.someResult = calculateSomeResult($scope.someArg); 
       // use the sub function to perform calculation and give only required thing as argument, don't pass entire $scope 
      } 

      function calculateSomeResult(someArg) { 
       return someArg * 2; //here perform any calculation or anything. and return the result 
      } 
     }]); 

その不要あなたは常に匿名関数を渡す持っていることを、あなたは、任意の関数の参照を渡すことができ、その関数が呼び出されるとき、あなたの機能が不要に直接その引数を得ることができるので、それは3つの引数が与えられますスコープと機能の余分な層を作成します。

+0

こんにちはサム、質問はリンク関数自体についてではなく、リンク関数内または他の関数を宣言することについて –

+0

リンク関数の外か内部にある関数を宣言することができます。他の関数に$ scopeを渡すと、あなたの関数は引数を受け入れて結果を返す純粋でなければなりません。あなたはmain関数で使用し、必要に応じてスコープに追加します。その場合、スコープを他の関数に渡す必要はありません。例えば、私は答えを更新しています。 –

関連する問題