我已经开始开发一个汉堡模块,基本上由两部分组成:
- 一个打开菜单的“burger-opener”按钮,很可能是一个属性指令,包括一个单击事件侦听器、dom 和 css 不可知论
- 一个“汉堡菜单”元素,很可能是一个受益于嵌入的指令,让客户端为了可重用性而决定菜单包含的内容。这基本上在它的顶部提供了一个关闭按钮,在 ng-transclude 元素之前。
就功能而言,这两个元素之间必须存在紧密的关系,即按钮元素将调用“打开”到汉堡菜单元素中。
问题是,我有一个约束,即按钮和菜单不必相互包含。例如,必须能够像这样使用模块
<ul burger-menu>
<li>Save</li>
<li>Load</li>
</ul>
<section id="container">
<a href="" burger-opener class="burgerOpen"><a>
</section>
这个约束似乎是自动排除指令到使用“require”语法的指令通信,因为这个 angularjs 功能假设指令是自包含的。所以除非我创建一个包含我的 2 个元素的顶级 DOM 控制器......我被卡住了。
我一直在使用蛮力方法,即使用来自 rootscope 的广播按钮将“打开”消息发送到菜单指令。它就像一个魅力,但我对它不满意。
另一种方法是在按钮上设置一个偶数,但出于某种奇怪的原因,我会将其视为失败。我可能错了,但我很确定有一种更优雅的方法可以使用 AngularJS 范例连接这两个元素,而不使用广播或事件。
你知道吗 ?我想基本上我在问诸如 ui bootstrap modal service 之类的组件实际上是如何工作的。