如何获得共享指令的所有元素的数组,以便我可以迭代它们并让它们彼此做不同的事情?
我有一个用于多个元素的指令,并且根据使用restrict: 'A'
的每个指令的属性值,我需要所有指令相互通信并在不同方面相互影响。链接功能。
我尝试过使用:
link : function(scope, elem, attr) {
attr.forEach(function(e, i) {
if(attr[i] === 'menu') {
//do something
} else if (attr[i] === 'scroll') {
//do something else
}
});
}
但是我将forEach作为未定义的函数。我也试过一个简单的for循环,但两者都是:
elem.length
和
attr.length
给我未定义。
请注意,我不想使用不同逻辑的不同指令,因为我需要每个元素实际执行特定于其他元素的操作。
我可以直接使用jQuery来选择元素,但由于几个原因,它不太理想。
答案 0 :(得分:2)
您创建了一个service注入到您想要的每个指令中,然后您可以迭代它们。
这就是你在指令和控制器之间共享数据的方式。
修改强>
您可以创建一个包含所有元素的全局数组。现在你可以遍历它们了。这是一个plunker。
app.directive('thing', function(){
var elements = [];
return {
restrict: 'E',
link: function(scope, element, attrs){
element.text('hello');
elements.push(element);
console.log(elements);
}
};
});
答案 1 :(得分:0)
使用jquery has-attribute选择器:
var menuElements = $('[menu]');
var scrollElements = $('[scroll]');
迭代元素:
elements.each(function(index, elem) {
...
});