首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在vue中循环和创建具有多个子菜单级别的菜单

如何在vue中循环和创建具有多个子菜单级别的菜单
EN

Stack Overflow用户
提问于 2019-03-01 22:33:25
回答 2查看 1.1K关注 0票数 0

我使用的是Vue,我有一个对象数组,我需要用它来创建一个菜单。

数组列表如下所示:

代码语言:javascript
复制
[{
    "name": "Menu 1",
    "url": "/link/menu-1",
    "sub-menus": []
},
{
    "name": "Menu 2",
    "url": "/link/menu-2",
    "sub-menus": [
        {
            "name": "Menu 2-1",
            "url": "/link/menu-2-1",
            "sub-menus": []
        },
        {
            "name": "Menu 2-2",
            "url": "/link/menu-2-2",
            "sub-menus": []
        }
    ]
},
{
    "name": "Menu 3",
    "url": "/link/menu-3",
    "sub-menus": [
        {
            "name": "Menu 3-1",
            "url": "/link/menu-2-1",
            "sub-menus": [
                {
                    "name": "Menu 3-1-1",
                    "url": "/link/menu-3-1-1",
                    "sub-menus": []
                }
            ]
        },
        {
            "name": "Menu 3-2",
            "url": "/link/menu-2-2",
            "sub-menus": []
        }
    ]
}]

由于有多个子菜单级别,我不知道如何动态生成菜单。

子菜单的级别不是固定的。它可以是无子菜单,也可以是2级或3级以上。

我希望输出结果如下所示。

代码语言:javascript
复制
<ul>
<li>
    <a href="/link/menu-1">Menu 1</a>
</li>
<li>
    <a href="/link/menu-2">Menu 2</a>
    <ul>
        <li>
            <a href="/link/menu-2-1">Menu 2-1</a>
        </li>
        <li>
            <a href="/link/menu-2-2">Menu 2-2</a>
        </li>
    </ul>
</li>
</ul>

由于我是Vue的新手,我不知道如何实现这一点。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-02 00:40:35

我认为你可以用两个组件来实现。

它将为自己和它的子菜单构建一个菜单:

代码语言:javascript
复制
var Menu = ({
  name:"Menu",

  template: `
    <li>
        <a :href="url">{{name}}</a>

        <ul v-if="subMenus.length > 0">
          <Menu 
            v-for="menu in subMenus" 
            :name="menu.name" 
            :url="menu.url" 
            :subMenus="menu['sub-menus']">
          </Menu>
        </ul>
    </li>`,

  props: {
    name:     {type:String, required:true},
    url:      {type:String, required:true},
    subMenus: {type:Array, required:true}
  }
})

另一个用来遍历所有内容,它将遍历您的菜单列表(您将作为一个道具传递):

代码语言:javascript
复制
var FullMenu = ({ 
  components: {Menu},

  name:"FullMenu", 

  template: `
    <div>
      <ul>
        <Menu 
          v-for="menu in menus" 
          :name="menu.name" 
          :url="menu.url" 
          :subMenus="menu['sub-menus']">
        </Menu>
      </ul>
    </div>
    `,

  props: {
    menus: {type:Array, required:true}
  }
})

就像这样使用它:

代码语言:javascript
复制
<div>
  <full-menu :menus="yourMenuListAsDataOrProps"></full-menu>
</div>`

下面是一个关于Observable的运行示例:https://observablehq.com/d/802261a535698d88#FullMenu

票数 1
EN

Stack Overflow用户

发布于 2020-07-08 14:44:40

我用下面的方法解决了这个问题:

在模板部分=>中使用它

代码语言:javascript
复制
<span v-html="hasChild(chart)"></span>

和hasChild方法=>

代码语言:javascript
复制
hasChild(chart){
  var html = ''
  if(chart.childs.length>0){
    html = html+'<ul>'
    chart.childs.map(child=>{
      html = html+'<li>'
      html = html+'<a>'+child.title+'</a>'
      if(child.childs.length>0){
        html = html+this.hasChild(child)
      }
      html = html+'</li>'
    })
    html = html+'</ul>'
    return html
  }
}

对我来说很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54946716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档