从子指令调用父指令中的函数

时间:2014-02-12 00:00:50

标签: javascript angularjs angularjs-directive angularjs-scope

我有一个名为dropDownSortMenu的子指令。此子指令中的元素具有ng-click函数。执行此函数后,我想调用父指令customTable的函数。

plnkr位于:http://plnkr.co/edit/7b2mce9jsAXmJpfKjgdx

2 个答案:

答案 0 :(得分:1)

我认为你已经非常接近使用正确的方法了。你已经有一个控制器,但有两件事缺失:

  1. 需要在父指令控制器的上下文中设置sort函数。 (即this
  2. 然后你需要require: '^customTable'。 (^用于表示我们正在寻找父指令的控制器。)
  3. 现在在dropDownSortMenu的链接功能中,您可以访问父控制器的上下文,并可以随心所欲地做任何事情。

    Demo

答案 1 :(得分:0)

使用范围的事件调度程序; $emit(name, args)用于将事件发送到父作用域,$broadcast(name, args)将向下通过层次结构下发事件。
要捕获抛出的事件,请使用$on(name, listener)个侦听器。

您也可以参考$scope.$parent向上行(或$scope.$parent.$parent等),但不推荐 - 您必须查找范围层次结构n升级,使代码变得严格(如果更改范围嵌套级别,例如通过在某处添加ng-repeat,该怎么办?)。


您还可以在指令中使用 transclusion (在适当的时候) - 这将允许您的模型驻留在指令的隔离范围之外,从而允许自然访问上面层次结构中的任何控制器(前提是没有孤立的范围。) 有关指令'tranclude属性的说明,请参阅$compile service docs