我正在尝试使用Angularjs
. 我以前做过类似的事情Backbonejs
,但是我很难弄清楚如何用 angular 来做到这一点。
在我的html
文件中,我有以下菜单占位符。
<div id='menu1'></div>
<div id='menu2'></div>
<div id='menu3'></div>
<div id='menu4'></div>
<div id='menu5'></div>
我的一些 Angular 模块在加载时会添加一个菜单(在 中run
)。它们中的每一个都只保留一个特定的插槽(即menu1..5
),因此它们不会发生冲突。当某些模块未加载时,它们的菜单不会显示在菜单栏中。
角度模块在概念上看起来像:
angular.module('myModule3', [])
.service('someService', function($http) {
// get some data to populate menu (use $http)
this.menuItems = ['orange', 'apple', 'banana']
})
.run(['someService', function(someService) {
// create a rendered menu item
...
// insert it at id="menu3"
})
为简单起见,呈现的菜单项应如下所示:
<ul>
<li>organge</li>
<li>apple</li>
<li>banana</li>
</ul>
我对角度很陌生,所以我真的不知道从哪里开始。我一直在阅读directive
s,但看不到它们如何适合这里,因为它们需要一些自定义标记(可能是包含 DOM 目标的自定义菜单标记(即menu..5
)。此外,如何将其连接到控制器是我不清楚。
更新
除了上述base template
(在 DOM 中包含任意锚点)和指令(将生成将插入这些锚点的 DOM 元素)之外,模板将有助于创建 DOM 元素。该模板将位于一个单独的文件中,其中包含指令的 DOM 元素将被插入到的位置(与指令的通常情况相反,在这种情况下,已经存在的标签将被替换/插入到与指令定义匹配的特定标记中:
<menu ng-model="Model3DataService" target="#menu3">
<ul>
<li ng-repeat="for item in items"></li>
</ul>
</menu>
同样,来自 Backbone/jquery 背景,这是有道理的,但这可能不是 Angular 的正确做法。如果是这样,请告诉我如何使基本模板免于任何关于模块的知识和他们放置菜单的假设(即他们分配的菜单栏的哪个插槽)。我很高兴听到其他解决方案...