3

アプリケーションで使用したいサードパーティのプラグインをラップする Angular ディレクティブを作成しています。プラグインは、カスタム ディレクティブを使用している要素に割り当てられたクラスを読み取る必要があります。マークアップで静的クラスの割り当てを行うと、クラス属性に問題なくアクセスできます。しかしngClass、追加のクラスを要素に動的に割り当てる場合、カスタム ディレクティブには表示されません。

以下の問題を示すために、簡単なplunkrを作成しました。

http://plnkr.co/edit/i5iBwlKXuvrdjF85wiIU?p=preview

しかし、その要点はここに含まれています:

<body ng-controller="MainCtrl"> 
  <div class="staticAssignment"
    ng-class="cssClass"
    my-directive>
  </div>
</body>

と:

app.controller('MainCtrl', function($scope) {
  $scope.cssClass = 'dynamicAssignment';
});

app.directive("myDirective", function () {
  return {
    link: function (scope, element, attr) {
      console.log("my classes: ", element.attr('class'))
    }
  };
}); 

ディレクティブのlink関数が実行されると、ログに記録されることを期待しています: "staticAssignment dynamicAssignment"が、動的に割り当てられたクラスはリンク時に表示されません。

link関数のコンテンツを a でラップ$timeoutするとこれは解決しますが、それでも疑問が生じます: 特定の要素でさまざまなディレクティブが評価される順序を定義する信頼できる方法はありますか? 理想的には、独自のアクションを実行する前に、jazz が終了するmyDirectiveのを明示的に待ちたいと思います。ngClass

ありがとう!

4

3 に答える 3

0

ディレクティブの優先度属性を設定しようとしましたか?

優先度 - 1 つの DOM 要素に複数のディレクティブが定義されている場合、ディレクティブが適用される順序を指定する必要がある場合があります。優先度は、コンパイル関数が呼び出される前にディレクティブをソートするために使用されます。優先度は数値で定義されます。数値の優先度が高いディレクティブが最初にコンパイルされます。同じ優先度のディレクティブの順序は定義されていません。デフォルトの優先度は 0 です。

angularドキュメントから。

于 2013-09-24T23:41:48.570 に答える