当前位置:首页 > VUE

vue实现多级列表

2026-01-18 13:11:42VUE

实现多级列表的两种常见方法

递归组件法
通过组件递归调用自身实现嵌套渲染,适合动态层级数据。

  • 定义组件时通过name属性使其可递归调用。
  • 模板中使用v-for遍历数据,嵌套部分通过条件渲染递归组件。

示例代码:

<template>
  <ul>
    <li v-for="item in list" :key="item.id">
      {{ item.name }}
      <tree-list v-if="item.children" :list="item.children"/>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'TreeList', // 关键:定义name以便递归
  props: ['list']
}
</script>

静态模板法
直接编写嵌套模板结构,适合固定层级场景。

  • 使用多层v-for嵌套,每层对应一级数据。
  • 代码直观但灵活性较低,需手动维护层级。

示例代码:

<template>
  <ul>
    <li v-for="item in list" :key="item.id">
      {{ item.name }}
      <ul v-if="item.children">
        <li v-for="child in item.children" :key="child.id">
          {{ child.name }}
        </li>
      </ul>
    </li>
  </ul>
</template>

关键注意事项

  • 数据格式:要求嵌套结构包含children字段,如{ id: 1, name: '一级', children: [...] }
  • 性能优化:深层次嵌套时建议添加v-memo或虚拟滚动
  • 样式控制:通过CSS类名(如.level-1/.level-2)区分不同层级缩进

动态加载扩展

若需懒加载子级数据,可结合@click事件和异步请求:

vue实现多级列表

<li @click="loadChildren(item)">
  {{ item.name }}
  <span v-if="item.isLoading">加载中...</span>
</li>

methods: {
  async loadChildren(item) {
    item.isLoading = true;
    item.children = await fetchChildrenData(item.id);
    item.isLoading = false;
  }
}

标签: 列表vue
分享给朋友:

相关文章

vue实现多选联动

vue实现多选联动

vue实现多选联动的方法 使用v-model绑定数组 在Vue中,可以通过v-model绑定一个数组来实现多选联动。当复选框被选中或取消选中时,数组会自动更新。 <template>…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…

vue实现伸缩

vue实现伸缩

Vue实现伸缩功能的方法 使用CSS过渡和Vue的v-if或v-show 通过CSS的transition属性结合Vue的条件渲染指令(v-if或v-show)可以实现元素的伸缩效果。定义一个CSS类…