在同一范围内查找具有相同指令的其他元素?

时间:2014-11-16 15:43:21

标签: angularjs angularjs-directive

有没有办法找到在同一范围内应用同一指令的其他元素?

我想使用此信息创建matching input values指令。

e.g。我可能有一个带有一些输入的模板,它们都使用相同的指令:

<div ng-controller="MainCtrl">
    <input type="text" same-value>
    <input type="text" same-value>
</div>

主要是我会用它来比较密码和&amp;密码重复,但我想制定这个更通用的指令。

1 个答案:

答案 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实例化一个指令时,它将创建一个新的范围并调用链接函数。每个实例都有自己的范围,这就是我们将范围放在实例上的原因。然后,我们使用我们添加到范围的任何数据来识别实例,并可以使用范围上的函数进行通信。