What is the ideal way of communicating within the same level sibling directives?

时间:2017-06-19 14:06:10

标签: javascript angularjs oop

I have a code segment in a controller which define directives within a ng-repeat statement.

    <div class="Value" ng-repeat="value in valueList">
       <my-directive inner-value="value"></my-directive>
   </div>

Here I want to communicate between the directives (e.g. - the button in the 2nd directive to be appeared when click on the button of the 1st directive)

What would be the ideal way of communicating between the same level directives through the controller

1 个答案:

答案 0 :(得分:2)

我知道有两种方式:

活动

  • 子组件触发事件。

  • 家长收到他们并决定做什么

服务

  • 所有组件都注入了服务
  • 服务有一个主题,所有组件都听取
  • 单击按钮时,任何组件都可以调用服务进行更新
  • 对于每次更新,每个组件都知道更改

我更喜欢哪个?

基于服务

为什么?

  • 事件的缺点

    • 让事件使流程复杂化,所有组件都固定在它们的位置。我们还需要担心它们之间共享数据。多个输入,他们的状态等,大混乱。
    • 如果有很多变化,很难跟踪
    • 逻辑位于Component中,难以测试和维护。我喜欢虚拟组件
  • 服务优势

    • 所有逻辑都在服务中,易于测试和维护
    • 组件可以移动,改变他们的位置仍然很有效
    • 轻松添加新组件,不需要再次重写整个逻辑
    • 利用rx编程的强大功能,简化任何复杂的逻辑