JSON与Twitter Bootstrap的AngularJS菜单和子菜单

时间:2013-08-04 01:29:04

标签: javascript json angularjs

我是AngularJS的新手。我正在使用Twitter Bootstrap开展个人项目,因此我可以学习AngularJS。我在JSON文件中有我的数据。项目标题和主菜单链接正在填充。其中一个链接下有一个子菜单,这是我无法填充的。 我想要做的是使用ng-repeat加载子菜单。所以基本上我正在处理ng-repeat中的ng-repeat。欢迎任何和所有提示。 谢谢!

我的控制器看起来像这样:

'use strict';

var app = angular.module('myApp', []);

app.controller('NavCtrl', function($scope, $http) {

$http.get('app/content/nav.json').success(function(data) {

    $scope.nav   = data;
    $scope.links = data.links;

    });

});

我的JSON:

{
"projectTitle" : "My Website Title",
"links" : [
    {"name" : "Home", "url" : "/", "className" : ""},
    {"name" : "About", "url" : "/about", "className" : ""},
    {"name" : "Contact", "url" : "/contact", "className" : ""},
    {"name" : "Categories", "url" : "/categories", "className" : "dropdown", "sub" :
        [
            {"name" : "Tech Stuff", "url" : "/techStuff"},
            {"name" : "AngularJS", "url" : "/angularJS"},
            {"name" : "HTML5", "url" : "/html5"},
            {"name" : "Javascript", "url" : "/javascript"},
            {"name" : "jQuery", "url" : "/jquery"}
        ]
    }
]
}

我的HTML:

<div ng-controller="NavCtrl" class="navbar navbar-inverse navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="brand" href="#">{{nav.projectTitle}}</a>
            <div class="nav-collapse collapse">
                <ul class="nav">
                    <li ng-repeat="link in links" class="{{link.className}}">
                        <a href="{{link.url}}" class="{{link.sub && 'dropdown-toggle' || ''}}" data-toggle="{{link.sub && 'dropdown' || ''}}">{{link.name}} 
                            <b ng-show="link.sub" class="caret"></b>
                        </a>
                        <ul class="dropdown-menu" ng-show="link.sub">
                            <li ng-repeat="sub in links">
                                <a href="">{{sub.name}}</a>
                            </li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>

1 个答案:

答案 0 :(得分:4)

将子菜单数据填充模板更改为

<li ng-repeat="subItem in link.sub">
    <a href="{{subItem.url}}">{{subItem.name}}</a>
</li>

link.sub是当前数据对象的子集合,然后循环遍历每个子集合项。

Demo on jsFiddle