2016-12-25 14 views
0

JSファイルはこのように見えますが、コントローラ内でfunction()内で宣言されている関数の1つを使用したいと思います。同じJSファイル内のコントローラ内から関数を呼び出せません

HTMLがアップロードされるときにファイルが呼び出されています。

(function() { 
//Lots of different functions 
})(); 

(function(angular) { 
//Controller that uses a function declared above. 
})(window.angular); 

どうすればよいですか?私は単に関数の名前を述べると、 "変数をファイルできません"と言います - コントローラが初期化するまでにその関数が読み込まれていない可能性が高いためです。

+1

必要に応じてエクスポートします。 – Shomz

+0

この関数は外部からは見えません。これはクロージャを使用する目的全体です。それをグローバル関数にするために宣言した後、 'window.myFunc = myFunc;'を使ってください。 –

+0

@ChrisG、これはうまくいった。 –

答えて

0

別の関数内で定義された関数を、外部スコープで使用できる場合にのみ呼び出すことができます。

function outer() { 
this.inner = function() { 
    alert("hi"); 
} 
} 

あなたは

(new outer()).inner(); 
1

により、コントローラ内から外側の関数を呼び出すことができますすべての開発者が中に変数や関数の定義を避けるためにそれを使用する技術があるだけで作成した生命維持または即時呼び出される関数の実行グローバルスコープです。このアイフルなしで何かを追加すると、

(function(){}); // iife 

グローバルウィンドウオブジェクトに割り当てられます。そのため、あなたのコントローラは上記の関数を呼び出すことができません。あなたは今、2つの異なるスコープ最初の生命維持および第二生命維持

0

同じ考え関わる提案のカップルしている:それはからアクセス可能なように

  1. (function(angular) { 
        //Controller that uses a function declared above. 
    })(window.angular); 
    

    の外の関数を作成します直ちに呼び出された関数内で呼び出すことができます。

  2. コントローラ内に関数を作成するときは、外側のスコープからアクセス可能にしてください(おそらく、window.yourFunction = function() { ... }など)。

関連する問題