考虑两个带有隔离作用域的嵌套指令:
<dctv1>
<dctv2></dctv2>
<dctv1>
如果我想让 dctv2
和 dctv1
通信,我有几个选项:
- 在
dctv2
的定义中使用require:'^dctv1'
来要求获取dctv1
的控制器。 - 在父作用域上使用包装器
<dctv2 callParent="hello()"></dctv2>
并使用scope:{callParent:'&'}
调用父域上的表达式。 - 也可以在
dctv2
中使用$scope.$emit
,但此时所有父作用域都会收到消息。
现在我想让 dctv1
和 dctv2
通信。
- 我唯一能做的是使用
$scope.$broadcast
,但这样所有子元素都会收到。
这里的通信是指调用函数或类似的操作。不想设置监视项会堵塞脏检查循环。
如何以最佳方式使 dctv1
通知 dctv2
,并使它们松耦合?我应该能够删除 dctv2
而不会出错。