访问嵌套对象和数组中的数据

时间:2014-11-11 17:30:54

标签: javascript angularjs nested

我正在制作一个相当复杂的菜单系统,它应该根据已登录的权限进行更改。现在我的问题是,我是否嵌套了太多?如何在菜单中的管理员中访问项目中的标题?我将使用angularJS' s-repeat生成菜单,因此我需要能够通过menus.admin.items.title"中的"项目来访问它。例如。我想在我添加更多内容之前我应该​​问一下,如果这不是一个可行的选择。

这是角度控制器内的菜单结构:

$scope.menus = [{
    admin: [{
        title: 'Administration',
        items: [{
                title: 'Hantera utbildningar',
                URL: 'mngprograms'
            },
            {
                title: 'Hantera kurser',
                URL: 'mngcourses'
            },
            {
                title: 'Hantera lärare',
                URL: 'mngteachers'
            },
            {
                title: 'Hantera studenter',
                URL: 'mngstudents'
            }],
        URL: 'administration',
        id: 'administration'
    }]
}]

这是我尝试访问它的失败:

修改

要更全面地了解整个事情,请访问:http://jsfiddle.net/52evmfg9/

<ul id="main-menu">
    <li data-ng-repeat="menu in menus" id="{{menu.id}}"><a href="{{menu.URL}}.php">{{menu.title}}</a>
        <ul data-ng-if="menu.admin">
            <li data-ng-repeat="subitem in menu[3].admin.items"><a href="{{subitem.URL}}.php">{{subitem.title}}</a></li>
        </ul>
    </li>
</ul>

我该怎么写?

2 个答案:

答案 0 :(得分:0)

回答评论中的问题:

<div data-ng-repeat="(k,v) in menus"> 
       <div data-ng-repeat="(k,w) in v"> 
            <div data-ng-repeat="(k,x) in w">
                <ul data-ng-repeat="(k,y) in x" >
                    {{k}} : {{y}} 
                    <li ng-if="z.title" data-ng-repeat="(k,z) in y track by $index">
                        Title: {{z.title}} URL: {{z.URL}}
                    </li> 
                </ul> 
            </div>
       </div>
</div>

http://plnkr.co/edit/WLnXBQbbOqveJuHiUeEI?p=preview

答案 1 :(得分:0)

我建议您的层次结构更明确。对于每个菜单,您可以拥有一个键&#34;子菜单&#34;您可以在其中找到层次结构中更下方的菜单。隐藏元素的有用指令是ng-show

我只会构建一个完整的菜单树,然后为您的用户或角色设置权限。否则树将变得无法管理,并且会有重复的数据。

以下是jsBin:

的示例

http://jsbin.com/sixiw/2/edit?html,js,output