【发布时间】:2016-09-02 11:58:37
【问题描述】:
我正在尝试使用模板和函数递归在 AngularJS 中创建一个菜单。不幸的是,代码使用了很多递归,所以请提供一些帮助。
这里是菜单数据(JSON 格式):
var menu = {
'users': {title: 'Users', href: '/admin/users', icon: 'fa-user', 'priority': '2'},
'dashboard': {title: 'Dashboard', href: '/admin', icon: 'fa-home', badge: null, 'priority': '1'},
'expert': {title: 'Expert users', href: '', icon: 'fa-cog', 'priority': '3'},
'logins': {title: 'Social logins', href: '/admin/social-logins', icon: 'fa-lock', 'priority': '2', parent: 'expert'},
'config': {title: 'Site config', href: '/admin/config', icon: 'fa-cog', 'priority': '1', parent: 'expert'},
'security': {title: 'Site config', href: '/admin/config', icon: 'fa-key', 'priority': '1', parent: 'config'},
'deploy': {title: 'Deploy', href: '/admin/deploy', icon: 'fa-upload', badge: null, 'priority': '1'},
};
您可以注意到,有些项目有一个名为parent 的属性,它指向一个父键,它们将嵌套在该键下。
问题 #1: 处理此 JSON 并按优先级排序。如果一个项目有一个父键,则在父项目中创建一个children 键(用于模板递归)并将它们放在它下面。我认为这可以通过递归轻松完成,但我不知道该怎么做。
所以当代码正确时,它应该给出以下输出:
var final = [
{title: 'Dashboard', href: '/admin', icon: 'fa-home', badge: null, 'priority': '1', id: 'dashboard'},
{title: 'Users', href: '/admin/users', icon: 'fa-user', 'priority': '2', id: 'users'},
{
title: 'Expert users', href: '', icon: 'fa-cog', 'priority': '3', id: 'expert',
children: [
{ title: 'Site config', href: '/admin/config', icon: 'fa-cog', 'priority': '1', id: 'config',
children: [{title: 'Security settings', href: '/admin/security', icon: 'fa-key', 'priority': '1', id: 'security'}]
},
{title: 'Social logins', href: '/admin/social-logins', icon: 'fa-lock', 'priority': '2', id: 'logins'}
]
},
{title: 'Deploy', href: '/admin/deploy', icon: 'fa-upload', badge: null, id: 'deploy'}
]
问题 #2: 已解决。使用 AngularJS template recursion 渲染它。我想我已经用这些例子想出了这个。 Here is my attempt 渲染它。当数据格式正确时,菜单呈现得非常完美。
只需要问题 #1 的帮助。从menu var 创建final var(我猜是使用递归)。
【问题讨论】:
-
P.S.我可以使用下划线或 jquery(如果它有助于减少代码大小)
标签: javascript angularjs json recursion