私はバニラ AngularJS v1.4.5 (jQuery なし) を使用しており、カスタム ディレクティブでコンパイル時に祖父母要素に属性を追加したいと考えています。
compile 関数では、twoメソッドを使用して祖父母要素を取得し、parent()
メソッドを使用して属性を追加することで、これを実現できます。ただし、親要素にngIfディレクティブがある場合、祖父母要素は属性を取得しません。element
attr()
angular.module('myApp', [])
.directive('foo', fooDirective)
;
function fooDirective() {
return {
compile : compile,
priority: 601 // ngIf is 600
};
function compile(element, attrs) {
var parent, grandparent;
parent = element.parent();
grandparent = parent.parent();
parent.attr('foo', 'bar');
grandparent.attr('foo', 'bar');
}
}
私が知っていることは次のとおりです。
- 親要素で が使用されていない場合
ngIf
、属性は祖父母に追加されます。 - この問題は
scope
、スコープが要素にリンクされる前のコンパイル段階で発生しているため、 に関連するものではありません。 - 私のコンパイル機能
ngIf
は、の優先度を持つ600
(およびコンパイル機能を持たない)の前に実行する必要があります。 ngIf
DOM 内の要素を (その子要素と共に) 完全に削除して再作成しますが、祖父母要素に影響を与えたり、その属性を変更したりしてはなりません。
親要素にディレクティブがある場合、ディレクティブの祖父母要素に属性を追加できない理由を誰かに説明できますngIf
か?