2 つの属性ディレクティブ (両方で制限が「A」に設定されています) がdir1
ありdir2
、それらは 2 つの異なるモジュールで定義されています。1 つのアプリ (これらのモジュールの両方を含む) には、これら 2 つのディレクティブのいずれかを追加できる要素があります。現在dir1
、これがこの要素のデフォルトになるように設定していますが、dir2
このディレクティブを「オーバーライド」する方法が必要です。
これを行いたい要素は、別のディレクティブのテンプレートの一部であるparentDir
ため、最初に考えたのは、 の関数に何らかの機能を追加することcompile
でしparentDir
た。のテンプレートparentDir
が含まれている<div class="myElement" dir1="{{data}}"></div>
と、コンパイル関数は次のようになります。
function(tElement, tAttrs) {
if ("true" == tAttrs.useDir2)
{
var myElement = tElement.find("div.myElement");
myElement.removeAttr("dir1");
myElement.attr("dir2", "{{data}}");
}
return function (scope, element, attrs) {
// link stuff
}
}
whereはディレクティブuseDir2
の属性になります。parentDir
これは問題なく動作しますが、 の値useDir2
は補間された値であるため、 で必要な値を確認することはできませんtAttrs.useDir2
。
2 つのディレクティブに優先順位を設定することを考えましたが、それぞれのディレクティブが互いに正しく関連していることを確認するために、他のディレクティブの優先順位を知る必要があります。誰かが 1 つのモジュールに入って別のモジュールの優先順位を変更し、この機能を壊してしまうのは望ましくありません。2 つのディレクティブは異なるモジュールにあるため、お互いを完全に無視したいと考えています。
私の問題を十分に明確に説明できたことを願っています。これを行う方法がわからないだけで、これを行う簡単な方法が欠けている可能性があると思います。ありがとう。