2015-04-16 40 views
0

我有一個表與最終看起來像這樣排:如何在angular.js中將指令鏈接在一起?

<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,但這似乎只返回一個類型相同指令的下一個兄弟。即在上面的例子中,它遍歷所有的my-dir-1列,但跳過my-dir-2my-dir-3。有沒有辦法將這些鏈接在一起,所以這個例子會起作用?

回答

0

我不會像這樣的兄弟指令之間進行通信。它可能會變得混亂。它們之間通信的最好辦法是要麼

1)通過父指令控制器

所以,你的頂級<tr>元素可能是它自己的指令。將requires聲明添加到myDir1myDir2定義對象,然後通過父控制器進行通信

2)通過服務。

有一個服務,這兩個指令可以注入並讓它處理共享邏輯/依賴關係分辨率