AngularJS父指令与子指令进行通信

考虑两个使用隔离作用域的嵌套指令:

<dctv1>
    <dctv2></dctv2>
<dctv1>

如果我想dctv2dctv1我有可能会选择:

  • 我可能需要的控制器dctv1中的定义dctv2使用require:'^dctv1'
  • 我可以用包装器<dctv2 callParent="hello()"></dctv2>scope:{callParent:'&'}来调用父范围的表达式
  • 我也可以使用$scope.$emitdctv2 $scope.$emit ,但是所有的父范围都会听到这个消息。
  • 现在我想dctv1交谈dctv2

  • 我可以完成这个的唯一方法是使用$scope.$broadcast ,但是然后所有的孩子都会听到。
  • 通过在这里交谈我的意思是调用一个函数或类似的。 不想设置阻塞digestloop的手表。

    我怎样才能让dctv1以最佳方式通知dctv2 ,使它们松散耦合? 我应该能够无误地删除dctv2。


    看看AngularJS NgModelController的一些想法。

    每个<dctv2>指令都要求<dvtv1>将控制器注入。 然后,您可以将对象或回调添加到该控制器的属性中,并在<dctv2>销毁时将其删除。

    <dvtv1>不会直接与孩子通话,但会触发绑定到其属性的回调。

    例如;

    NgModelController$parsers$formatters ,它们是一个函数回调数组。 您将自己的函数推入数组中以扩展该控制器的行为。

    NgModelController执行输入验证时,它基本上是通过这些属性与其他指令进行交谈。


    您可以使用必须传递给父级的每个孩子的ID来管理它; 父母会使用该ID回报事件:只有当父母传递的ID是他自己的ID时,孩子才会执行该操作。

    再见


    我会建议使用角度服务。 这样你可以将你的行为分解成一个或多个服务。

    看看这也是:AngularJS:如何看服务变量?

    链接地址: http://www.djcxy.com/p/24973.html

    上一篇: AngularJS parent directive communicate with child directive

    下一篇: IntelliJ IDEA Reporting Contract Violation Warning