2016-07-12 7 views
1

単一のng-clickディレクティブで2つの関数を呼び出していますが、認識すべき問題がありますか?ng-clickディレクティブに複数の関数を呼び出すという欠点はありますか?

<button type="button" ng-click="func1(); func2();">Click</button> 

我々はまた、代わりに2つの関数を呼び出す単一の関数を呼び出すことができます。

<button type="button" ng-click="func1()">Click</button> 

$scope.func1(){ 
    func2(); 
} 

$scope.func2(){ 
//something 
} 
+0

1つの関数を使用し、ロジックがコントローラのどこに属するかを保持します。コントローラーコードを読み込んでリファクタリングするのが簡単なロジックを確認するのが簡単 – charlietfl

答えて

0

いいえ、NG-クリック内側に複数の関数を呼び出すことのない欠点はありません...そして、最初の関数func2()を呼び出し、私たちはそれをのほとんどを無視する必要がありますそれは良い習慣ではないからです。

これは、別の関数内で関数を呼び出すことで実現できます。

<button type="button" ng-click="func1(); func2(); func3();">Click</button> 

ここでfunc1が最初に呼び出され、次にfunc2とfunc3が呼び出されます。

2

は違いはありません、それらの両方は別として(とより良い私の意見では)として適していますオプション

<button type="button" ng-click="clickAction()">Click</button> 

$scope.clickAction = function() { 
    $scope.func1(); 
    $scope.func2(); 
}; 
+0

なぜ弟、最初のアプローチに問題はありますか? @AlexD –

+0

@SurjeetBhadauriyaあなたのディレクティブ(たとえば 'ng-click')には、ビューとコントローラの間に「接着剤」を提供し、コントローラが実際のロジックを処理するようにするのは良いことです。そのような観点から、 'ng-click'の中に関数を1つだけ持ち、ハンドラに必要な処理をさせる方が良いと思います。 – JLRishe

+0

@SurjeetBhadauriya両方のメソッドをラップする3番目のメソッドを作成します。ここでの利点は、テンプレートのロジックを少なくすることです。 – JEMI

0

はい、最初のアプローチは正しいです。 ng-clickあり、それは、単一またはmultimple機能または例下記だから、"anyVar = 'Button Clicked'"

これらのような他の式だ問題ではありませんが、同じように有効なAngularJS expressionを尋ねると評価正しい

<button type="button" ng-click="func1(); func2();">Click</button> 

または

<button type="button" ng-click="anyVar = 'Button Clicked'; index++;">Click</button> 
+0

これは正しいと思います。 これは 'ng-click'が' function'だけではなく 'AngularJS式'を評価するために働きます。 –

+0

*「以下は正しい」とはどういう意味ですか?あまり答えはありません – charlietfl

+0

'ng-click'を使う方法。質問を一度読んでください。 –

0

両方の方法で問題はありませんが、私は$scopeに1つの関数しか宣言しませんし、別の2つの関数はJSでのみ宣言します:

<button type="button" ng-click="func3();">Click</button> 

func1() { 
    // something 
} 

func2() { 
    // something 
} 

$scope.func3 = function() { 
    func1(); 
    func2(); 
} 
1

1回のクリックで2つの機能を呼び出すのは悪い習慣です。 3番目の関数を追加することを決定したらどうなりますか?特定の条件が満たされたときに第2の機能のみを実行したい場合はどうすればよいですか?プレゼンテーションコードに必要以上のロジックを置くことは、懸念の分離が不十分です。

0

すべてのアプローチは正しいです。代わりにscope関数の代わりにfunc1()func2()という2つの関数をJS関数として使用し、ng-clickを使用して新しいスコープ関数内でそれらを呼び出すことができます。

HTMLコード:

<button type="button" ng-click="click()">Button</button> 

コントローラコード:

function func1() { 
    // func1 code goes here 
} 

function func2() { 
    // func2 code goes here 
} 

$scope.click = function() { 
    func1(); 
    func2(); 
} 

この実装はng-click

  • 最初はそれが減少し、ある上の2つの機能を追加することに比べて利点がいくつかありウォッチャーの人数はであるからscope関数の場合、ng-clickに2つの関数を追加する場合は、両方の関数をscopeに定義する必要があります。
  • 第2に、func2()が条件付きである場合、すなわち出力がfunc1()に依存する場合は、func2()を実行するかどうかを決定できます。
0

いいえ、欠点はありませんが、それは良い習慣ではありません...そして、ng-clickの中で関数を呼び出すのか、コントローラの中で別の関数を呼び出すのかに違いはありません。そして、もしng-clickの中で関数を呼び出すなら、そこに書かれた順番に呼び出します。

例えば:関数func1()

関連する問題