ディレクティブのコンパイル関数で DOM 要素に基づいていくつかの計算を行います。結果をスコープに格納する必要があるため、このデータをリンク関数 (スコープにアクセスできる関数) に渡そうとしましたが、その方法がわかりません。
DOM 要素が他のディレクティブのリンク関数によって処理される前に (ディレクティブの優先順位を使用して) アクセスする必要があるため、コンパイル関数でこれらの計算を実行する必要があります。
ディレクティブのコンパイル関数で DOM 要素に基づいていくつかの計算を行います。結果をスコープに格納する必要があるため、このデータをリンク関数 (スコープにアクセスできる関数) に渡そうとしましたが、その方法がわかりません。
DOM 要素が他のディレクティブのリンク関数によって処理される前に (ディレクティブの優先順位を使用して) アクセスする必要があるため、コンパイル関数でこれらの計算を実行する必要があります。
JavaScript シンボルの範囲を考えると十分だと思います。これを参照してくださいhttp://jsfiddle.net/JV7vH/1/
リンク関数を返す必要があるコンパイル関数を定義します。これは内部関数であるため、親関数のシンボルが表示されます。
app.directive('ui',function ($compile) {
return {
restrict:'E',
template: '<div class="mcb">hey</div>',
compile: function ($tElement, $tAttrs) {
var foo = "a valuable value";
console.log('compiling' + foo);
return function (scope, element, attrs) {
console.log('linking:' + foo);
}
}
}
});
compile-link の実行順序についても読みたいと思うかもしれません @joshdavidmiller は次のように述べています。
<div directive1>
<div directive2>
<!-- ... -->
</div>
</div>
実行順序は
directive1: compile
directive2: compile
directive1: controller
directive1: pre-link
directive2: controller
directive2: pre-link
directive2: post-link
directive1: post-link