2

ディレクティブのコンパイル関数で DOM 要素に基づいていくつかの計算を行います。結果をスコープに格納する必要があるため、このデータをリンク関数 (スコープにアクセスできる関数) に渡そうとしましたが、その方法がわかりません。

DOM 要素が他のディレクティブのリンク関数によって処理される前に (ディレクティブの優先順位を使用して) アクセスする必要があるため、コンパイル関数でこれらの計算を実行する必要があります。

4

1 に答える 1

5

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
于 2013-06-04T13:47:32.187 に答える