Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度传感器中多层指令间的通信_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

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
属性现在是我需要的控制器数组,可以通过索引访问。虽然我觉得我的指令现在耦合得更紧密了一些,但比起使用事件/服务,我更喜欢它

我在解释所有这些,因为在文件中没有提到这一点