2017-07-06 9 views
0

スクリプトタグ内にjavascript関数を定義するa.htmlがあります。 明らかにxxx()はbCtrlの中にないので、誰でもxxx()を呼び出す方法を知っていますか? 角度を知らない人がこの機能を担当しているため、関数xxxをコントローラまたは指令に移動できません。javascript関数を呼び出すには、角度コントローラのhtmlスクリプトタグ

a.html

<html ng-app="myApp"> 
    <div ng-controller="bCtrl"> 
    ..... 
    </div> 
    <script> 
     (function($) { 
      $(function(){ 
       function xxx() { 
        // do something 
       } 
      }); 
     })(jQuery); 
    </script> 
</html> 

bCtrl

angular 
.module('myApp') 
.controller('bCtrl', [ 
    '$scope', 
    function ($scope) { 
     // wanna call xxx() if possible 
    } 
]); 
+0

'xxx'が定義されている内側のクロージャの内側以外の場所からその関数を呼び出す方法はまったくありません。スコープ上の問題です。 – deceze

+1

[この質問とその回答](https://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background)が役立ちます。あなたが持っている基本的な問題は、Angularのやり方とjQueryのやり方の間の矛盾です。 Angularは単なるライブラリではなく、フレームワークであり、ページ/アプリケーションを構築するためのアプローチです。がんばろう! –

+0

xxx関数は二重プライベート(閉じた内部の関数である閉じた内部の関数)に似ています。あなたは少しハックされているその関数を呼び出すために公開参照(ウィンドウまたは別のグローバル参照に添付)を与える必要があります。 –

答えて

1

問題は、それが(コールバックが$に渡される)関数内で定義されたということです、それはスクリプトタグ内で定義されていますということではありません。つまり、その機能には完全に限定されています。何かがその関数の外部から参照できるようにしない限り、関数の外から呼び出すことは不可能です。あなたはそれが可能グローバル変数に代入することです作ることができる

一つの方法:

window.xxx = xxx; 

...しかし、一般的には、グローバル変数は、最後のソリューションです。

代わりに、おそらく、その関数をモジュール(理想的には、非角ブロックで実行されているすべてのもの)に移動し、そのモジュールへの依存関係をコントローラに注入し、そのように呼び出すことができます。

関連する問題