Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用双递归在AngularJS中创建菜单?(功能模板)_Javascript_Angularjs_Json_Recursion - Fatal编程技术网

Javascript 如何使用双递归在AngularJS中创建菜单?(功能模板)

Javascript 如何使用双递归在AngularJS中创建菜单?(功能模板),javascript,angularjs,json,recursion,Javascript,Angularjs,Json,Recursion,我正在尝试使用模板和函数递归在AngularJS中创建一个菜单。不幸的是,代码使用了大量递归,因此请提供一些帮助 以下是菜单数据(JSON格式): 正如您所注意到的,一些项有一个名为parent的属性,该属性指向一个父键,它们将嵌套在该父键下 问题#1:处理此JSON并按优先级排序。如果项具有父项,请在父项中创建一个子项项(用于模板递归),并将它们放在父项下。我认为使用递归可以很容易地做到这一点,但我就是不知道如何做到这一点 因此,当代码正确时,应给出以下输出: var final = [

我正在尝试使用模板和函数递归在AngularJS中创建一个菜单。不幸的是,代码使用了大量递归,因此请提供一些帮助

以下是菜单数据(JSON格式):

正如您所注意到的,一些项有一个名为
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'}
            ]