考虑两个具有隔离范围的嵌套指令:
<dctv1>
<dctv2></dctv2>
<dctv1>
如果我想让
dctv2
与dctv1
对话,我可以选择:dctv1
dctv2
的定义中使用require:'^dctv1'
的 Controller <dctv2 callParent="hello()"></dctv2>
和scope:{callParent:'&'}
$scope.$emit
中使用dctv2
,但是所有父作用域都将听到此消息。 现在,我希望
dctv1
与dctv2
对话。 $scope.$broadcast
,但是所有 child 都会听到。 此处所说的是指调用一个函数或类似函数。不想设置阻塞了摘要循环的 watch 。
如何使
dctv1
以最佳方式通知dctv2
,使它们松耦合?我应该能够删除dctv2而不会出现错误。 最佳答案
看一看AngularJS NgModelController的一些想法。
每个<dctv2>
指令都需要<dvtv1>
来注入(inject)它的 Controller 。然后,您可以向该 Controller 的属性添加对象或回调,并在<dctv2>
被销毁时将其删除。<dvtv1>
不会直接与 child 对话,但是会触发绑定(bind)到其属性的回调。
例如;NgModelController
具有$parsers
和$formatters
,它们是函数回调的数组。您可以将自己的函数插入数组以扩展该 Controller 的行为。
当NgModelController
执行输入验证时,基本上就是通过这些属性与其他指令进行通信。