2016-04-19 14 views
1

自己呼び出し関数を使用して、すべてのjavascriptコードを角度コントローラに組み込みます(私はベストプラクティスのどこかでそれを見たと思います)。だから私のコントローラは、次のようになります。Javascript角型コントローラの自己呼び出し関数

(function() { 
// code 
})() 

は、私は1つのファイルにすべてのコントローラをマージするがぶ飲みを使用しています。私の質問はこれです。 これは、アプリケーションの起動時に私のJavascriptコードがすべて呼び出されて実行されることを意味しますか? もしそうなら、これは非常に良いアプローチではないと思います。 その問題の解決策はありますか?コメントはありますか? ありがとう

答えて

4

いいえ、すべてのコードが実行されるわけではありません。あなたが実行されますどのようなあなたの角度モジュール

(function() { 
    'use strict'; 

    angular 
    .module('myModule', []) 
    .controller('myController', ['$http', myControllerFunc]); 

    function myControllerFunc ($http) { 
    // ... 
    } 
})(); 

を定義すると、モジュールとコントローラを登録するだけangular方法です。しかし、実際のコントローラロジックはコールバック機能にあり、コントローラが呼び出されたときにのみ呼び出されます(ルータなど)。

だから、匿名関数でコードをラップして、たとえばmyControllerFuncをグローバル名前空間の外に残すことをお勧めします。

+0

音が論理的です。答えをありがとう。 – Dimitris

1

あなたのコードを無名関数に定義することは重要ではありません。 Javascriptクライアント(この問題のブラウザ)は、どちらの方法でもコードを解析する必要があります。

匿名関数でコールバック可能なものがあれば、それは実行されます。デカップルされたメソッドで宣言されたvarがある場合、単純な分離スクリプトのインクルードと同様に、そのvarを定義します。

JavaScriptはどちらかの方法でJavaScriptを「解析」していますが、コードで呼び出されないメソッドは決して呼び出しません。もちろん、それはfooが存在するので、それが解析されるようにfoo(bar)と呼ぶときそれを知る必要があります。それは一般的なJavaScriptです。

関連する問題