这可能有点抽象,因为我没有任何代码。 我可以获得具有特定指令的元素列表,然后使用该列表通过指令与这些元素进行通信吗?
谢谢!
编辑:看起来我应该在我的指令中注入一个服务,然后让指令“注册”我的服务,然后处理那里的更改/通信。
答案 0 :(得分:0)
我真的赞成你的问题,因为我喜欢它。虽然你可以使用一些css选择魔法,但是一个有角度的方法可以让你的指令在一些常见的地方用服务注册自己,然后你就可以使用该服务来获取它们的句柄。
编辑: 看看这个plunkr:
http://plnkr.co/edit/2Zoq5sTigmRtBgUIOWv2?p=preview
这是一种非常天真的方法,我们定义了一个名为RegistryService的东西,我们的每个目标都在链接阶段注册到服务:
.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 /无论你做什么。