有没有办法找到在同一范围内应用同一指令的其他元素?
我想使用此信息创建matching input values
指令。
e.g。我可能有一个带有一些输入的模板,它们都使用相同的指令:
<div ng-controller="MainCtrl">
<input type="text" same-value>
<input type="text" same-value>
</div>
主要是我会用它来比较密码和&amp;密码重复,但我想制定这个更通用的指令。
答案 0 :(得分:2)
您可以创建父指令并通过控制器在子级和父级之间进行通信,也可以创建跨实例共享的服务。
另一种选择是在声明指令时提供共享数据和功能,如:
angular.module("whatever").directive("sameValue", function() {
var sameValueInstances = [];
return {
link: function(scope, elem, attr) {
sameValueInstances.push(scope);
// register listener to remove from array when destroyed..
// do something with the instance array
sameValueInstances.forEach(...);
}
};
});
指令的实例不止一个,但指令的声明只有一个实例(函数本身)。声明是共享的,因此sameValueInstances
是共享的。当angular实例化一个指令时,它将创建一个新的范围并调用链接函数。每个实例都有自己的范围,这就是我们将范围放在实例上的原因。然后,我们使用我们添加到范围的任何数据来识别实例,并可以使用范围上的函数进行通信。