javascript - Vue.js - 嵌套的 v-for 循环
问题描述
我有一个 Vue 3.0 应用程序。在这个应用程序中,我有以下内容:
export default {
data() {
return {
selected: null,
departments: [
{
name: 'Sports',
items: [
{ id:'1', label: 'Football', value:'football' },
{ id:'2', label: 'Basketball', value:'basketball' },
]
},
{
name: 'Automotive',
versions: [
{ id:'3', label: 'Oil', value:'oil' },
{ id:'4', label: 'Mud Flaps', value:'mud-flaps' },
]
}
]
};
}
};
我需要在下拉列表中呈现这些项目。值得注意的是,这些项目需要按部分呈现。为了做到这一点,我正在使用Bootstrap 的下拉标题。我的挑战是,HTML 需要以我看不到如何使用 Vue 的方式呈现。我需要像这样呈现我的 HTML:
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<li><h6 class="dropdown-header">Sports</h6></li>
<li><a class="dropdown-item" href="#">Football</a></li>
<li><a class="dropdown-item" href="#">Basketball</a></li>
<li><h6 class="dropdown-header">Automotive</h6></li>
<li><a class="dropdown-item" href="#">Oil</a></li>
<li><a class="dropdown-item" href="#">Mud Flaps</a></li>
</ul>
基于这种需要,我必须有一个嵌套的 for 循环。在伪代码中,它会是这样的:
foreach department in departments
<li><h6 class="dropdown-header">{{ department.name }}</h6></li>
foreach item in department.items
<li><a class="dropdown-item" href="#">{{ item.label }} </a></li>
end foreach
end foreach
我知道我可以用 Razer 之类的东西来做到这一点。但是,我无论如何都看不到在 Vue 中执行此操作。然而,我不得不相信我忽略了一些东西,因为渲染层次结构是一种常见的需求。如何在不改变数据结构的情况下在 Vue 中渲染层次结构?
谢谢你。
解决方案
只需像这样使用嵌套的 v-for :
<template v-for="(department , i) in departments">
<li><h6 class="dropdown-header" :key="`head-${i}`">{{ department.name }}</h6></li>
<template v-for="(item , j) in department.items">
<li><a class="dropdown-item" href="#" :key="`sub-${i}${j}`">{{ item.label }} </a></li>
</template>
</template>
推荐阅读
- php - PHPExcel setWidth() in cm
- c++ - QtConcurrent gives longer runtimes for multiple cores
- dns - 我的域电子邮件被检测为垃圾邮件
- python - 将重采样限制在多年数据框中的月份
- bash - mongoDB 正确的 find() 命令
- android - 菜单在工具栏上不起作用
- wiremock - 如何使用 Wiremock 中的响应模板使用来自请求的数据设置响应正文值?
- javascript - 何时使用带有 jest 和酶的单元测试或快照测试?
- jquery - 使用覆盖覆盖正文和输入字段
- node.js - nodejs连接到MongoDB Atlas的问题