アプリケーションで使用したいサードパーティのプラグインをラップする 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
ありがとう!