首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vue中呈现嵌套列表而不嵌套HTML元素?

在vue中呈现嵌套列表而不嵌套HTML元素?
EN

Stack Overflow用户
提问于 2019-01-23 17:57:37
回答 2查看 675关注 0票数 0

我有点问题,想不出解决的方法,也不能在谷歌上找到任何相关的东西,或者更确切地说,我不知道要搜索什么。

我有一个数组categories和一个包含subcategories的对象

代码语言:javascript
复制
categories: [
    'Mobiles',
    'Mobiles Accessories',
    ...
]

subcategories: {
    'Mobiles': [
        'Mi',
        'Samsung',
        'Infinix',
        ...
    ],
    'Mobile Accessories': [
        'Mobiles Cases',
        'Headphones & Earphones',
        ...
    ]
}

现在我想用下面的方法来渲染一个菜单。

代码语言:javascript
复制
<span class="category">Mobiles</span>
<span class="subcategory">Mi</span>
<span class="subcategory">Samsung</span>
<span class="subcategory">Infinix</span>
...
<span class="category">Mobile Accessories</span>
<span class="subcategory">Mobiles Cases</span>
<span class="subcategory">Headphones & Earphones</span>
...

如果我在vue中使用v-for,我将不得不将.categories.subcategories嵌套在每个category的父元素中,这是我不想做的。

整个混乱的地方是我可以在父元素中使用flex-direction: column,当呈现列表时,它会自动流到下一列,如果我在父元素中嵌套.categories.subcategories就不会发生这种情况,因为现在categories的每个父元素都会移动到下一列,而不是它的高度。

那么,如何通过更改CSS或数据结构来实现这一点呢?

谢谢阿卡什。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-23 18:12:59

注意,在您的问题中,Mobiles Accessories不等于Mobile Accessories,因此您必须确保categories数组包含子类别中键的exaxt名称。

您可以使用reducemap

代码语言:javascript
复制
const categories = ['Mobiles', 'Mobile Accessories'];

const subcategories = {
    Mobiles: ['Mi', 'Samsung', 'Infinix'],
    'Mobile Accessories': ['Mobiles Cases', 'Headphones & Earphones'],
};

console.log(
    categories.reduce(
        (result, value) =>
            result.concat(
                { class: 'category', value },
                subcategories[value].map((value) => ({
                    class: 'subcategory',
                    value,
                })),
            ),
        [],
    ),
);

票数 1
EN

Stack Overflow用户

发布于 2019-01-23 18:24:11

这就是为您提供的解决方案!

使用两个for循环可以做到这一点。

代码语言:javascript
复制
var app = new Vue({
  el: '#app',
  data: {
    menu: {
      categories:[
      'Accessories',
     'Mobiles',
     ],
    subcategories: {
       'Accessories': [
        'Mobiles Cases',
        'Headphones & Earphones',        
    ],
    'Mobiles': [
        'Mi',
        'Samsung',
        'Infinix'
    ],
   
}
  }
  }
});
代码语言:javascript
复制
.category{
display:block;
padding:10px 0px;
}
.subcategory{
display:block:
margin:5px;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
    <div v-for="(menus,index) in menu.categories">
      <span class="category">{{ menus }}</span>
        <span class="subcategory" v-for="(submenu,index) in menu.subcategories[menus]">{{submenu}}<br/></span>
    </div>
</div>

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

https://stackoverflow.com/questions/54324501

复制
相关文章

相似问题

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