2017-05-31 11 views
-1

コントローラーの外で私の角度コントローラーのスコープにアクセスしようとしています。私は特定のアクションを実行し、完了時に特定のコールバックを実行する外部jsライブラリを使用しています。コールバックの1つで、angular.element(document.findElementById('elementId').scope()undefinedを返します。 しかし、最初のコールバック後に実行される2番目のコールバックでは、 angular.element(document.findElementById('elementId').scope()が有効なスコープを返します。ここangular.element(..)。scope()は最初は未定義を返します

いくつかのサンプルコード

<body id="authcontroller" ng-controller="AuthenticationController as auth"> 

<script> 
    window.externalLibObj = { 
    onCallback1: function(){ 
     // Undefined value for scope 
     var scope = angular.element(document.getElementById('authcontroller')).scope(); 
    }, 
    onCallback2(): function(){ 
     // Valid value for scope 
     var scope = angular.element(document.getElementById('authcontroller')).scope(); 
    } 
    }; 
</script> 
    </body> 

これらのコールバックが実行される順序はonCallback1、次いでonCallback2あるれます。 var scopeonCallback1に定義されていないが、onCallback2

の値がなぜscopeonCallback1に定義されていましたか?

ありがとうございました

+0

は、あなたがこれらのコールバックを呼び出しているコードを表示することができます支援を期待

$scope.$on('$viewContentLoaded', function(){ // here define/fire your callbacks and you will be sure that everything is init }); 

:あなたのAuthenticationControllerで

はこれを追加しますか? –

+0

@PeterLaBancaこれらのコールバックを呼び出すコードは、jsライブラリがロードされると自動的に実行されます。これらのコールバックを呼び出すコードは明示的に呼び出しません。 –

+0

両方のコールバックは即座に実行されますか? 2番目のコールバックが呼び出されるまでスコープが準備できていないタイミング問題のように聞こえるだけです。 –

答えて

0

タイミング問題のようです。あなたの最初のコールバックが実行されるとき、スコープは準備ができていませんが、それはあなたの2番目のコールバックにあります。関連するビューが正しくロードされたら、ロジックを変更してコントローラ内のコールバックをトリガする必要があります。私はそれが

+0

残念ながら、コールバックがトリガーされるタイミングは制御できません。私は負荷を使用しています。これを動作させるには別の方法を見つけ出す必要があるようです。 –

+0

私は上記のコントローラのイベントの中で約束を使用して約束を解決しようとします。あなたのコールバックの中には、その約束の '中に必要なコードを入れてください。コントローラが初期化されたときにあなたのコードが実行されます。それは意味をなさない? – quirimmo

+0

が動作するようになりました。あなたのすべての協力に感謝します! –

関連する問題