Angular获取共享指令的所有元素的列表

时间:2015-01-05 03:48:57

标签: javascript arrays angularjs dom angularjs-directive

如何获得共享指令的所有元素的数组,以便我可以迭代它们并让它们彼此做不同的事情?

我有一个用于多个元素的指令,并且根据使用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来选择元素,但由于几个原因,它不太理想。

2 个答案:

答案 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) {
   ...
});