2014-09-11 62 views
-1

這可能有點抽象,因爲我沒有任何代碼。 我可以得到一個具有特定指令的元素列表,然後使用該列表通過指令與這些元素進行通信?帶有特定指令的列表元素

謝謝!

編輯:它看起來像我應該注入一個服務在我的指令,並讓該指令「註冊」與我的服務,然後處理在那裏的變化/通信。

+0

請添加一些代碼.. – 2014-09-11 09:03:01

回答

0

我確實喜歡你的問題,因爲我喜歡它。雖然你可以使用一些css選擇魔法,但是一個有角度的方法是讓你的指令在一些常見的地方向服務註冊自己,然後你就可以使用該服務獲得對它們的處理。

編輯: 看看這個plunkr:

http://plnkr.co/edit/2Zoq5sTigmRtBgUIOWv2?p=preview

這是我們定義了一個名爲RegistryService啄一個非常幼稚的做法,和我們每個direcives的寄存器來服務中的鏈接時相:

.service('RegistryService', function(){ 
    var REGISTERED_DIRECTIVES = []; 

    return { 
    register: function(directive){ 
     REGISTERED_DIRECTIVES.push(directive); 
    }, 
    unregister: function(directive){ 
     _.remove(REGISTERED_DIRECTIVES, function(dir){ 
     return dir === directive; 
     }); 
    }, 
    get : function(){ 
     return REGISTERED_DIRECTIVES; 
    } 
    }; 
}) 

和聯動/註冊:

.directive('myDirective', ['RegistryService', function(RegistryService){ 
    return { 
    template : '<div>directive-here</div>', 
    link: function(scope, attr, element){ 
     RegistryService.register(element); 
    } 
    } 
}]) 

然後,你應該可以隨意使用指令的元素。然而,更多的Angular方法是將東西放在指令的範圍內,它會對範圍變化做出反應,而不是通過獲取元素來粗暴地操縱css /無論你在做什麼。

+0

所以我會在我的指令中注入服務,然後讓指令監聽該服務中的更改? 還是我遠嗎? – 2014-09-12 09:19:18

+0

是的,就像那樣。此外,您還可以通過該服務與您的指令進行溝通。 – 2014-09-12 09:30:25

+0

謝謝!我可能會爲此條目添加一些代碼,使其更加清晰,並提供更好的答案。我將你的答案標記爲答案。 – 2014-09-12 09:38:47

相關問題