考虑两个具有隔离范围的嵌套指令:

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

如果我想让dctv2dctv1对话,我可以选择:
  • 我可能需要使用dctv1
  • dctv2的定义中使用require:'^dctv1'的 Controller
  • 我可以使用包装<dctv2 callParent="hello()"></dctv2>scope:{callParent:'&'}
  • 在父作用域上调用表达式
  • 我也可以在$scope.$emit中使用dctv2,但是所有父作用域都将听到此消息。

  • 现在,我希望dctv1dctv2对话。
  • 我可以完成此操作的唯一方法是使用$scope.$broadcast,但是所有 child 都会听到。

  • 此处所说的是指调用一个函数或类似函数。不想设置阻塞了摘要循环的 watch 。

    如何使dctv1以最佳方式通知dctv2,使它们松耦合?我应该能够删除dctv2而不会出现错误。

    最佳答案

    看一看AngularJS NgModelController的一些想法。

    每个<dctv2>指令都需要<dvtv1>来注入(inject)它的 Controller 。然后,您可以向该 Controller 的属性添加对象或回调,并在<dctv2>被销毁时将其删除。
    <dvtv1>不会直接与 child 对话,但是会触发绑定(bind)到其属性的回调。

    例如;
    NgModelController具有$parsers$formatters,它们是函数回调的数组。您可以将自己的函数插入数组以扩展该 Controller 的行为。

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

    10-07 17:41