あなたの質問を完全に理解できるかどうかわかりませんので、誤解した場合は訂正してください。ディレクティブの複数の属性から値を取得したいだけですか?したがって、次のようなHTMLがあるとします。
<my-directive attr1="data1" attr2="data2" attr3="data3" />
そして、それらのさまざまな属性の値を取得したいですか?リンク関数では、attrsパラメーターを使用するだけです。例えば:
link: function(scope, element, attrs) {
var foo1 = attrs.attr1;
var foo2 = attrs.attr2;
var foo3 = attrs.attr3;
}
ディレクティブのscopeプロパティを使用して、属性をスコープに自動的にバインドすることもできます。ディレクティブに関するドキュメントを参照してください。だから、このようなもの:
scope: {
attr1: '@',
attr2: '@',
attr3: '@'
}
そして、それらのプロパティは自動的にスコープに含まれます。ただし、私が知ったように、これらの値は、期待したときに常に範囲内にあるとは限りません。したがって、この$watch
関数を使用して、必要な処理を実行できます。何かのようなもの:
link: function(scope, element, attrs) {
scope.$watch("attr1", function () {
if (scope.attr1)
{
//stuff with attr1
}
}
scope.$watch("attr2", function () {
if (scope.attr2)
{
//stuff with attr2
}
}
//....
}
それらをすべて同時に使用する必要がある場合は、の最初のパラメーターに関数を使用して、$watch
それらがすべて存在すると異なる文字列を返し、2番目のパラメーターである関数にロジックを配置することができます。 。だからこのようなもの:
link: function(scope, element, attrs) {
scope.$watch(function () {
if (scope.attr1 && scope.attr2 && scope.attr3)
{
return "allSet";
}
else
{
return "";
}
}, function (newVal) {
if ("allSet" == newVal)
{
//do stuff with all the properties
}
});
}
オブジェクトをスコープにバインドする場合は、「@」の代わりに「=」を使用できます。別のオプションは、親スコープの関数を評価する「&」です。これはすべて、上記のリンク先のディレクティブドキュメントで説明されています。