简体   繁体   English

如何在Vue.js中循环?

[英]How to loop in Vue.js?

I'm trying to create a menu with , but my menu isn't showing up. 我正在尝试使用创建菜单,但是菜单没有显示。 Here is what I have tried: 这是我尝试过的:

<div id="app" class="container">
    <b-menu v-for="menu in menu_items" v-bind:data="menu.menu_list" v-bind:key="menu.menu_list">
        <label>{{ menu.menu_list }} </label>
            <b-menu-list v-for="menu_item in menu_items.menu_list" v-bind:data="menu_item" v-bind:key="menu_item.message">
                <b-menu-item  > {{ menu.message }}</b-menu-item>
            </b-menu-list>
    </b-menu>
</div>

And here is my Vue.js code: 这是我的Vue.js代码:

var App = new Vue({
    el: '#app',
    data: {
     menu_items: [{
            menu_list : 'General' [
                    { message: 'First Menu' },
                    { message: 'Second Menu' }
                ],
            menu_list : 'Setting' [
                { message: 'First Setting Menu' },
                { message: 'Second Setting Menu' }
            ]
        }]
    }
})

Any solution(s)? 任何解决方案?

What i want to achieve 我想实现的目标

 - General
    - First Menu
    - Second Menu
 - Setting
    - First setting Menu
    - Second setting Menu

I'd suggest an alternate data structure. 我建议使用备用数据结构。

menu_items: [
  {
    label: "General",
    items: [
         {
          message: 'First Menu'
        },
        {
          message: 'Second Menu'
        }   
    ]
  },
  {
    label: "Settings",
    items: [
        {
          message: 'First Setting Menu'
        },
        {
          message: 'Second Setting Menu'
        }   
    ]
  }
]

In the above structure, each menu is an object that has a label and a list of menu items. 在上述结构中,每个菜单都是一个具有标签和菜单项列表的对象。

Then you could build your template this way: 然后,您可以通过以下方式构建模板:

<b-menu v-for="menu in menu_items" v-bind:key="menu.label">
    <label>{{ menu.label }}</label>
    <b-menu-list v-for="item in menu.items" v-bind:key="item">
      <b-menu-item> {{ item.message }}</b-menu-item>
    </b-menu-list>
</b-menu>

I took out the v-bind:data properties. 我取出了v-bind:data属性。 I'm not sure what they are for. 我不确定它们是干什么的。

I'm not sure how you want to format your data, but you should probably change your data structure. 我不确定您要如何格式化数据,但是您可能应该更改数据结构。

This is an example that might help you out though: 这是一个可以帮助您的示例:

var App = new Vue({
    el: '#app',
    data: {
     menu_items: [{
            general: [
                    { message: 'First Menu' },
                    { message: 'Second Menu' }
                ],
            setting: [
                { message: 'First Setting Menu' },
                { message: 'Second Setting Menu' }
            ]
        }]
    }
})

https://jsfiddle.net/5tLxdxds/ https://jsfiddle.net/5tLxdxds/

Here's my solution if you want to pass label directly from data 如果您想直接从数据传递标签,这是我的解决方案

var App = new Vue({
el: '#app',

data: {

        label1='General',
        label2='Settings',

        menu_items: [
                        { 
                            items:[
                                    {
                                        message:'first menu'
                                    },
                                    {
                                        message:'second menu'
                                    }
                                  ]
                            label = this.label1;
                        },

                        { 
                            items:[
                                    {
                                        message:'first Settings menu'
                                    },
                                    {
                                        message:'second Settings menu'
                                    }
                                  ]
                            label = this.label2;
                        },
                    ]
      }
    });

Now To render it in html code : 现在以html代码呈现:

<b-menu v-for="menu in menu_items" :key="menu.label">
         <label>{{ menu.label }}</label>
             <b-menu-list v-for="item in menu.items" :key="item">
                <b-menu-item> {{ item.message }}</b-menu-item>
            </b-menu-list>
</b-menu>

This is alternate solution if you want to pass your particular label name as data else anywhere 如果您想将特定标签名称作为数据传递给其他地方,则这是替代解决方案

Hope you got perfect help! 希望您能得到完美的帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM