AngularJS父指令与子指令进行通信
考虑两个使用隔离作用域的嵌套指令:
<dctv1>
<dctv2></dctv2>
<dctv1>
如果我想dctv2
谈dctv1
我有可能会选择:
dctv1
中的定义dctv2
使用require:'^dctv1'
<dctv2 callParent="hello()"></dctv2>
和scope:{callParent:'&'}
来调用父范围的表达式 $scope.$emit
在dctv2
$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