Javascript 角度传感器中多层指令间的通信
我正在创建一些指令,它们将在我的应用程序中组成一个“屏幕”。要创建此新屏幕,您可以这样编写:Javascript 角度传感器中多层指令间的通信,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在创建一些指令,它们将在我的应用程序中组成一个“屏幕”。要创建此新屏幕,您可以这样编写: <screen title="Test Title"> <side-menu align="left"> <menu-item>Test One</menu-item> <menu-item selected="true">Test Two</menu-item> <me
<screen title="Test Title">
<side-menu align="left">
<menu-item>Test One</menu-item>
<menu-item selected="true">Test Two</menu-item>
<menu-item disabled="true">Test Three</menu-item>
</side-menu>
<content animation="fade">
<view>Content for menu option 1</view>
<view>Content for menu option 2</view>
<view>Content for menu option 3</view>
</content>
</screen>
测试一
测试二
测试三
菜单选项1的内容
菜单选项2的内容
菜单选项3的内容
每个
将在
标记内显示一个“视图”。它像标签一样工作。我通过在数组中跟踪
指令中链接的每个
进行设置。与
相同
我的问题是,现在我已经设置好了,在
指令和
指令之间进行通信的最佳方式是什么,以便在单击时隐藏和显示正确的视图?我应该使用事件(一种公共服务)来保存状态,还是可以通过
和
指令访问
指令内部的控制器,并在那里保存数据/状态?根据我的理解,我只能从子指令访问父控制器,但如果愿意,不能访问“父级”控制器,除非我使用某种传递
我计划在这个“屏幕”上增加一些组件,这些组件也需要交流,所以我希望在继续之前确定“正确”的方式,或者至少获得一些反馈和其他想法
如果有任何问题让人困惑,我很乐意提供更多信息。经过一番挖掘,我了解到可以将数组传递给指令的
require
属性
您可以使用它查找父控制器和祖父母控制器。。。等等。以前,我的每个指令都有一个require
值,例如:require:“^sideMenu”
用于menuItem
指令
现在,通过传递数组,我可以要求侧菜单
和屏幕
控制器进入菜单项
指令:
require: ['^screen', '^sideMenu']
现在,在我的menuItem
指令的链接功能中,我可以通过以下方式访问这些控制器:
link: function(scope, element, attrs, controllers) {
var screenCtrl = controllers[0];
var sideMenuCtrl = controllers[1];
}
请注意,controllers
属性现在是我需要的控制器数组,可以通过索引访问。虽然我觉得我的指令现在耦合得更紧密了一些,但比起使用事件/服务,我更喜欢它
我在解释所有这些,因为在文件中没有提到这一点