如何在angular.js中将指令链接在一起?

时间:2015-04-16 21:35:24

标签: angularjs angularjs-directive

我有一个包含行的表,最终看起来像这样:

<tr>
    <td><my-dir-1></my-dir-1></td>
    <td><my-dir-1></my-dir-1></td>
    <td><my-dir-2></my-dir-2></td>
    <td><my-dir-1></my-dir-1></td>
    <td><my-dir-1></my-dir-1></td>
    <td><my-dir-3></my-dir-3></td>
    <td><my-dir-1></my-dir-1></td>
</tr>

在某些时候,我需要第一列来执行其someFn()函数,然后告诉下一列做同样的事情。想象一下这些指令看起来像这样:

angular.module('MyModule').directive('myDir1', [function() {
    return {
        restrict: 'E',
        link: function(scope) {
            scope.someFn = function() { //logic };
        }
    }
}]);
angular.module('MyModule').directive('myDir2', [function() {
    return {
        restrict: 'E',
        link: function(scope) {
            scope.someFn = function() { //logic };
        }
    }
}]);

我尝试使用scope.$$nextSibling,但这似乎只返回SAME类型指令的下一个兄弟。即,在上面的示例中,它会遍历所有my-dir-1列,但跳过my-dir-2my-dir-3。有没有办法将这些链接在一起所以这个例子可行?

1 个答案:

答案 0 :(得分:0)

我不会在这样的兄弟指令之间进行交流。它会变得混乱。在它们之间进行通信的最佳方式是

1)通过父指令控制器

所以你的顶级<tr>元素可能是它自己的指令。向requiresmyDir1定义对象添加myDir2语句,然后通过父控制器进行通信

2)通过服务。

提供两个指令都可以注入的服务,让它处理共享逻辑/依赖性解析