AngularJS:从隔离范围发送事件

Ale*_*ski 3 angularjs angularjs-directive angularjs-scope

我想拥有一组可重用的小部件,可以在应用程序的任何地方使用.对于前者 我想要一个设置菜单和菜单项定义为嵌套自定义标签.我希望能够将菜单项或菜单中的事件发送到父上下文(父指令中的控制器或其他).

但我想出了一些与范围有关的奇怪事情(也许我误解了一些事情):

<panel title="clock">
    <clock timezone="MST"></clock>
    <clock timezone="MST"></clock>
    <clock timezone="MST"></clock>
</panel>
Run Code Online (Sandbox Code Playgroud)

单击以下项目时,以下示例不会将事件触发到父指令控制器:http: //jsfiddle.net/9VTfR/2/.

但以下工作正常:http: //jsfiddle.net/9VTfR/3/.

此外,我在控制台中为两个选项都出现了一些奇怪的JS错误.

因此可以捕获任何级别的事件,因为父指令也应该是父作用域(不仅是父控制器),不是吗?任何帮助,将不胜感激.

Lan*_*don 6

您看到控制台的错误是因为您在小提琴中包含两次Angular(一次在外部资源中;一次在Frameworks和Extensions中).

$scope.$on('clickObject')没有被解雇的原因是因为你的两个指令都是兄弟姐妹,$emit只是向上通知

来自文档:

通过范围层次结构向上调度事件名称,通知已注册的侦听器.

您可以使用$scope.$parent(像这样),但会对您的指令的结构做出一些假设.您也可以使用$rootScope(像这样),如果您不使用足够多的唯一事件名称,您很可能会遇到冲突.