3

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

但是我发现了一些奇怪的范围(也许我误解了一些东西):

<panel title="clock">
    <clock timezone="MST"></clock>
    <clock timezone="MST"></clock>
    <clock timezone="MST"></clock>
</panel>

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

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

此外,对于这两个选项,我在控制台中都遇到了一些奇怪的 JS 错误。

那么是否有可能在任何级别捕获事件,因为父指令也应该是父范围(不仅是父控制器),不是吗?任何帮助,将不胜感激。

4

1 回答 1

6

您看到控制台的错误是因为您的小提琴中包含了两次 Angular(一次在外部资源中;一次在框架和扩展中)。

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

从文档

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

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

于 2013-04-21T22:56:48.837 回答