2015-01-05 57 views
0

如何獲得共享指令的所有元素的數組,以便我可以遍歷它們並讓它們彼此做不同的事情?Angular獲取共享指令的所有元素的列表

我有一個在多個元素上使用的指令,根據使用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

你創建了一個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); 
    } 
    }; 
}); 
+0

沒有什麼內置指令來使你獲得共享指令的所有元素? – EmmaGamma

+0

我相信[這篇文章](http://stackoverflow.com/questions/20801843/angularjs-find-element-with-attribute)是你在找什麼。看第二個答案。我還沒有找到任何內置替代文件。 – GGhe

+0

hmmm似乎沒有幫助...顯然,我已經知道你可以訪問鏈接函數中的元素,但是如何在鏈接函數中同時訪問所有指令元素而不查詢dom? – EmmaGamma

0

使用jQuery has-attribute選擇:

var menuElements = $('[menu]'); 
var scrollElements = $('[scroll]'); 

並遍歷元素:

elements.each(function(index, elem) { 
    ... 
}); 
相關問題