首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AngularJS + Bootstrap中动态添加下拉菜单

在AngularJS + Bootstrap中动态添加下拉菜单
EN

Stack Overflow用户
提问于 2014-01-19 03:28:23
回答 2查看 15.6K关注 0票数 2

我正在编写一个模块,它将创建一个动态菜单。如何在使用css类dropdown添加新类后运行指令,这个类也是由ng- <li>添加的。

代码:

代码语言:javascript
复制
angular.module('myapp', ['ui.bootstrap'])
.factory("menuService", ["$rootScope", function($rootScope) {
    "use strict";

    return { 
        menu: function() {
            $rootScope.globalMenu;
        },    
        setMenu: function(menu) {
            $rootScope.globalMenu = menu;
        }
    };

}])
.controller("MainController", ["$scope", "menuService",
    function($scope, menuService){

        menuService.setMenu([{href:"#", label:"Dropdown",
                                dropdown:[{href:"/edit", label:"Edit"}]},
                             {href:'/', label:'test'}]);

        $scope.bodyText = "Some text";


    }]);

这是html格式的代码。

代码语言:javascript
复制
    <ul class="navbar-nav nav navbar-left">
        <li ng-repeat="menu_element in globalMenu" ng-class="{dropdown: menu_element.dropdown != undefined}">
            <a ng-href="{{menu_element.href}}" ng-class="{'dropdown-toggle': menu_element.dropdown != undefined}">
                {{menu_element.label}}
                <b class="caret" ng-if="menu_element.dropdown != undefined"></b>
            </a>
            <ul ng-if="menu_element.dropdown != undefined" class="dropdown-menu">
                <li ng-repeat="sub_element in $parent.menu_element.dropdown">
                    <a ng-href="{{sub_element.href}}">{{sub_element.label}}</a>
                </li>
            </ul>
        </li>
    </ul>

链接至plunker:http://plnkr.co/edit/pgH35mmsjLJqV4yJuSYq?p=preview

所以我想要做的是和jQuery一样或者类似,在添加完整个ul>li块之后,我会运行$("li.dropdown").dropdown()。我是Angular的新手,我想用angular的方式来实现它。

我读过有关指令的内容,以及如何使用它们。但是我找不到如何在运行时应用指令。我在一条指令(ui.bootstrap.dropdownToggle)中读到过transclude: element没有启用它。我确信有一个简单的方法,但是我自己找不到……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-19 21:27:54

解决了!

我终于用ng-ifng-repeat-start成功了。通过注释中的帮助,我发现ng-class不会运行指令。

代码语言:javascript
复制
    <ul class="navbar-nav nav navbar-left">
        <span ng-repeat-start="menu_element in globalMenu"></span>
        <li ng-if="menu_element.dropdown !== undefined">
              <a ng-href="{{menu_element.href}}" class="dropdown-toggle">
                  {{menu_element.label}}
                  <b class="caret" ></b>
              </a>
              <ul class="dropdown-menu">
                  <li ng-repeat="sub_element in $parent.menu_element.dropdown">
                      <a ng-href="{{sub_element.href}}">{{sub_element.label}}</a>
                  </li>
              </ul>
        </li>
        <li ng-if="menu_element.dropdown === undefined">
              <a ng-href="{{menu_element.href}}">
                {{menu_element.label}}
              </a>
        </li>
        <span ng-repeat-end></span>
    </ul>

Plnkr上的工作示例。Plunker上的css发生了一些事情,昨天它还在工作...但它仍然有效。

票数 5
EN

Stack Overflow用户

发布于 2016-07-08 02:34:48

很好,这对我很有帮助。我在你的主题上有一个小小的变化。

代码语言:javascript
复制
<ul class="nav navbar-nav">
  <li ng-repeat='link in menu track by $index' ng-class='[{dropdown:link.sub}]'>
    /* normal menu */
    <a ng-if='!link.sub' ng-bind='link.id' ng-click='jump(link.to)'></a>
    /* dropdown menu */
    <a ng-if='link.sub' class="dropdown-toggle" data-toggle="dropdown">
      <span ng-bind='link.id'></span>
      <ul class="dropdown-menu inverse-dropdown">
        /* and repeat for the submenu */
        <li ng-repeat='slink in link.menu track by $index'>
          <a ng-bind='slink.id' ng-click='jump(slink.to)'></a>
        </li>
      </ul>
    </a>
  </li>
</ul>

我的菜单数组是

代码语言:javascript
复制
{id:'name', to:n}

其中n指向一个数组,该数组列出了我推送到页面中的一些html。如果有子菜单,则菜单数组元素为

代码语言:javascript
复制
{id:'name', sub:true, menu:[{id:'name', to:n}, etc.]}

我试过ui-bootstrap,但从来没有想过。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21208810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档