自定义兄弟指令之间的通信

时间:2016-11-11 13:45:37

标签: javascript angularjs

我有以下代码:

<tr ng-repeat="row in ctrl.tableData">
  <td><status></status></td>
  <td>{{row.id}}</td>                    
  <td>{{row.firstName}}</td>
  <td>{{row.lastName}}</td>                 
  <td><number-picker></number-picker></td>
</tr>

'status'和'number-picker'是我的客户指令。

我想根据同一行中“数字选择器”的某些状态来更改“状态”的可见性。由于它们处于网格中,因此两个指令都有多个实例。

到目前为止我最好的解决方案:
1.'ng-repeat'为每个'tr'创建一个新的范围,这样我就可以在'status'和'number-picker'之间共享一个变量 - 这个方法假设我在$ scope中有一个行变量,这很糟糕<登记/> 2. $播放“号码选择器”中的一个事件,然后使用共享$ scope的“状态”上的$ on捕获它 有没有更清洁的方法来实现这种行为?
提前感谢!

---编辑---
谢谢,Vanojx1!你的建议让我得到了一个我非常喜欢的解决方案。
我对您的代码进行了一些修改,所以现在它与我想要做的非常相似。

关键是现在我可以使用'numIsEven'来表示数字选择器的某些内部状态的变化任何其他兄弟指令

PLUNKER

1 个答案:

答案 0 :(得分:0)

添加shared-info之类的属性:

<tr ng-repeat="row in ctrl.tableData">
  <td><status shared-info="row.sharedInfo"></status></td>
  <td>{{row.id}}</td>                    
  <td>{{row.firstName}}</td>
  <td>{{row.lastName}}</td>                 
  <td><number-picker shared-info="row.sharedInfo"></number-picker></td>
</tr>

然后使用'=' DOC

定义指令范围
.....
    scope: {
        sharedInfo: '='
    },
....

row.sharedInfo将在指令

之间共享

Plunker