私は$compile
を使用して、オンザフライで指令をコンパイルしています。私が知りたいのは、ディレクティブがいつコンパイルされるのを検出して(約束?)、それをDOMに追加できるようにする方法があるかどうかです。私はこのような何かをしたい:
function newMessage() {
var directive = $compile("<div select-contacts message=\"newShare\"></div>");
// Compile directive
directive($scope).then(function(compiled) {
// After compiling, append it somewhere in the DOM
angular.element('#new_message').html(compiled);
});
}
私は$compile
のドキュメントを検索したと私はこのような何かを行う方法には、まだはっきりしていないんだか、それも可能だ場合。ここで
更新
は、私が現在持っているものです。これはローカルホスト上でtimeoutを0に設定して動作しますが、本番環境では50ms以上の遅延を導入すると動作します。私は安全であるために250msを持っていますが、それは恣意的と思われます。
function newMessage() {
angular.element('#new_message_container').html($compile("<div select-contacts message=\"newShare\"></div>")($scope));
$timeout(function() {
angular.element('#new_message').html(compiled);
content: angular.element('#new_message'),
elem: angular.element('#new_message_container'),
width: '1024px',
height: '480px'
});
});
}
基本的に私は隠されているコンテナ要素を持っています。私はその指示文をコンパイルして隠れたコンテナの中に置きます。次に、タイムアウトブロック内でモーダルを開き、ルートディレクティブ要素を隠しコンテナからモーダル要素に移動します。これをlocalhostで実行すると動作します。モーダルが開き、ディレクティブはすでにコンパイルされています。本番段階では、タイムアウトブロック内のコードが呼び出される前に、ディレクティブがコンパイル終了していないように見えます。効果は、モーダルが開きますが、空です。 0で$タイムアウトは、すべてのニーズのために十分である、DOMに適用されるように仕上げるとし、コンパイルを待つために
* "タイムアウトブロック内で、ルートディレクティブ要素を隠しコンテナからモーダル要素" *に移動するモーダルを開きます。したがって、基本的に別の "イベント"が待ちますか?その場合は、2つの$タイムアウト呼び出しを使用するか、ディレクティブ – Luxor001