Javascript 如何使用双递归在AngularJS中创建菜单?(功能模板)
我正在尝试使用模板和函数递归在AngularJS中创建一个菜单。不幸的是,代码使用了大量递归,因此请提供一些帮助 以下是菜单数据(JSON格式): 正如您所注意到的,一些项有一个名为Javascript 如何使用双递归在AngularJS中创建菜单?(功能模板),javascript,angularjs,json,recursion,Javascript,Angularjs,Json,Recursion,我正在尝试使用模板和函数递归在AngularJS中创建一个菜单。不幸的是,代码使用了大量递归,因此请提供一些帮助 以下是菜单数据(JSON格式): 正如您所注意到的,一些项有一个名为parent的属性,该属性指向一个父键,它们将嵌套在该父键下 问题#1:处理此JSON并按优先级排序。如果项具有父项,请在父项中创建一个子项项(用于模板递归),并将它们放在父项下。我认为使用递归可以很容易地做到这一点,但我就是不知道如何做到这一点 因此,当代码正确时,应给出以下输出: var final = [
parent
的属性,该属性指向一个父键,它们将嵌套在该父键下
问题#1:处理此JSON并按优先级排序。如果项具有父项,请在父项中创建一个子项
项(用于模板递归),并将它们放在父项下。我认为使用递归可以很容易地做到这一点,但我就是不知道如何做到这一点
因此,当代码正确时,应给出以下输出:
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模板递归来呈现此内容。我想我已经用这些例子计算出了这个。渲染它。当数据的格式正确时,菜单呈现得非常完美
只是需要帮助解决问题1。从菜单创建final
var(我想使用递归)。尝试以下操作:
(顺便说一句,示例JSON的结果不是您发布的var final
代码,因为“Deploy”的优先级高于“User”,并且处于同一级别(没有父级)。此外,“Expert User”没有父级“User”。)也不需要递归,迭代代码可以正常工作,速度更快
var菜单={
'users':{title:'users',href:'/admin/users',图标:'fa user','priority':'2'},
“dashboard”:{title:'dashboard',href:'/admin',图标:'fa home',徽章:null,'priority':'1'},
'专家':{title:'专家用户',href:'',图标:'fa cog','priority':'3'},
'logins':{title:'Social logins',href:'/admin/Social logins',图标:'fa lock','priority':'2',父级:'expert'},
'config':{title:'Site config',href:'/admin/config',图标:'fa cog','priority':'1',父级:'expert'},
'security':{title:'Site config',href:'/admin/config',图标:'fa key','priority':'1',父级:'config'},
'deploy':{title:'deploy',href:'/admin/deploy',图标:'fa upload',徽章:null,'priority':'1'},
};
函数insertAccordingToPriority(元素、数组){
var指数=0;
while(array.length>index&&array[index]。优先级P.S.我完全可以使用下划线或jquery(如果它有助于减少代码大小)
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'}
]