2017-05-26 1 views
0

すぐに定義された関数を呼び出し、次にイベント(クリック)を呼び出してパラメータを渡したいと思います。私のコードで後でIIFEを呼び出す問題

スニペットは、関数($ scope.appFunctions.testBtn)を有効にするまで機能します。

  • これは匿名関数のスコープが変数にではなくiifeにあるためですか?
  • どうすれば解決できますか?あなたのコードで今すぐ

ビュースニペット

<button type="button" ng-click="appFunctions.testBtn('filterStr')">testBtn</button> 

コントローラスニペット

$scope.appFunctions.testBtn = (function(filterStr){ 
    alert("testBtn Clicked"); 
})(); 

答えて

3

$scope.appFunctions.testBtnはウィッヒがundefinedで、機能の実行結果です。このundefinedはng-clickディレクティブに渡されます。このようにするのは簡単ではないでしょうか?

$scope.appFunctions.testBtn = function (filterStr) {/*...*/} 
$scope.appFunctions.testBtn(); 

あなたがそれをバインドした後、あなたはすぐにそれを呼び出し、それがng-clickのために動作します。

+0

ありがとうございます!直ちに私はその質問を書いた。私は、後に実行される必要がある他の関数を呼び出すための "ローダー"関数を書くことを検討した。あなたの応答から、これは不要なコードになります。ありがとう! – Oxossi

+0

@imoses Yury Tarabankoさんの答えをチェックしてください、あなたの要件を満たすかもしれません。 –

+0

ありがとうございました!好奇心のために、上記のパターンを使用すると "明白な"メリットはありますか?最初の実行のタイミングを制御できますか? (例えば、従属機能が最初にロードされることを確認する) – Oxossi

1

元の関数が何も返さない場合、IIFEから同じ関数を返すことができます。

$scope.appFunctions.testBtn = (function testBtn(filterStr){ 
    alert("testBtn Clicked"); 
    return testBtn; 
})(); 
2

この場合、関数は何も返さず、$ scope.appFunctions.testBtnに未定義が割り当てられます。そのため、後で呼び出されると失敗します。

iifeを削除し、宣言した後に関数を呼び出すだけです。

関連する問題