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

Mic*_*rek 2 javascript twitter-bootstrap angularjs twitter-bootstrap-3

我正在编写一个模块,可以动态创建动态菜单.如何在添加新<li>的css类后运行指令,该类dropdown也由ng-class添加.
代码:

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";


    }]);
Run Code Online (Sandbox Code Playgroud)

这是html中的代码

    <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>
Run Code Online (Sandbox Code Playgroud)

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

所以我想做的是和jQuery一样或类似,我会$("li.dropdown").dropdown()在添加完整的ul> li块之后运行.我是Angular的新手,我希望以有棱角的方式做到这一点.

我读了关于指令,如何使用它们.但我找不到如何在运行时应用指令.我transclude: element在一个指令(ui.bootstrap.dropdownToggle)中读过没有启用它.我确信有一种简单的方法,但我自己也找不到......

Mic*_*rek 5

解决了!

我终于ng-if和它一起做了ng-repeat-start.在评论的帮助下,我发现ng-class不运行指令.

    <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>
Run Code Online (Sandbox Code Playgroud)

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