我不确定我是否完全理解你的问题,所以如果我误解了,请纠正我。只是想从指令的多个属性中提取值吗?假设你有一个这样的 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: {
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
它返回一个字符串,一旦它们都在那里,你的逻辑就会不同. 所以是这样的:
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
}
});
}
如果你想将对象绑定到你的作用域中,你可以使用 '=' 而不是 '@'。另一个选项是“&”,它评估父范围内的函数。这在上面链接的指令文档中都有解释。