2017-03-15 13 views
-2

私はAngularJSファクトリの1つを含めて呼び出すサードパーティのJavaScriptアプリケーションの関数を使用します。この関数の1つのパラメータは、DOM要素のIDです。この要素がこの要素を操作するためです。AngularJS:getElementByIdで要素が見つかりません

ThirdPartyApp.doSomething("#elementId").then(function (success) { 

        }, function (error) { 

        }); 

しかし、私はエラーを取得する:... idを持つ要素を取得することができません

私は手動でそれを呼び出そうとしましたので、アプリがdocument.getElementByIdを使用していますが、それは要素をしても見つからないと仮定ブラウザのDOMエクスプローラには存在しますが。

idを持つ要素は、ng-include経由でインクルードするHTMLページにあります。

AngularJS環境でこの問題を解決するには、サードパーティ製アプリケーションの動作方法を変更できないため、どうすればよいですか?

MOREここINFORMATION

は要素とhtmlページです:AngularJSで

<ng-include src="'/views/shared/test.html'"></ng-include> 

なぜdocument.getElementById("testId"):ここ

<div> 
    <iframe id='testId' ng-src='{{test}}' style='overflow: hidden;' /> 
</div> 

は、私は、このHTMLページを含める方法です工場はiframe要素を見つけられませんか?

+1

'#'を付けずにelementIdを渡してみましたか? –

+0

@DanielBernsonsはい。同じ結果 – Palmi

+0

その場合、使用しているサードパーティのアプリケーションやHTMLコードがどのようなものなのか分からなければ、役に立つヘルプを提供することは不可能です。 –

答えて

1

使用しているサードパーティライブラリのソースコードが表示されないため、ここで何が起こっているのかを正確に伝えるのは難しいです。

しかし、私の推測では、ng-includeで追加しているテンプレートは、iframe要素を取得するための呼び出し時にコンテンツの読み込みが完了していないと思います。これを確認するには

、あなたのAngularJSコントローラに以下を追加することで要素を取得しよう:

$scope.$on('$includeContentLoaded', function() { 
    var myTest = document.getElementById("testId"); 
}); 

コードのこのブロックは、レンダリングするあなたの「NG-含まれている」コンテンツを待ちます。

+0

申し訳ありません。打ち間違え。実際にはAngularJS工場にあります。私は次のようにしました:$ rootScope $ on( '$ includeContentLoaded'、function(){ var myTest = document.getElementById( "sketch"); });しかし、この関数は決して呼び出されません。 – Palmi

+0

あなたの工場はあなたのテンプレートを完全に認識していません。これは、コントローラー内に**必要な**ロジックです。 –

関連する問題