当前位置:首页 > VUE

vue cli实现树形列表

2026-01-22 13:05:18VUE

使用 Vue CLI 实现树形列表

安装依赖

确保已安装 Vue CLI。若未安装,可通过以下命令全局安装:

npm install -g @vue/cli

创建一个新的 Vue 项目:

vue create tree-list-demo

数据结构设计

树形列表通常需要嵌套数据结构。例如:

const treeData = [
  {
    id: 1,
    label: 'Parent 1',
    children: [
      {
        id: 2,
        label: 'Child 1',
        children: []
      }
    ]
  }
];

递归组件实现

创建一个递归组件 TreeItem.vue 来渲染树形结构:

<template>
  <li>
    <div @click="toggle">
      {{ node.label }}
    </div>
    <ul v-if="isOpen && node.children.length">
      <TreeItem
        v-for="child in node.children"
        :key="child.id"
        :node="child"
      />
    </ul>
  </li>
</template>

<script>
export default {
  name: 'TreeItem',
  props: {
    node: {
      type: Object,
      required: true
    }
  },
  data() {
    return {
      isOpen: false
    };
  },
  methods: {
    toggle() {
      this.isOpen = !this.isOpen;
    }
  }
};
</script>

主组件调用

在主组件 App.vue 中引入并调用递归组件:

<template>
  <div>
    <ul>
      <TreeItem
        v-for="node in treeData"
        :key="node.id"
        :node="node"
      />
    </ul>
  </div>
</template>

<script>
import TreeItem from './components/TreeItem.vue';

export default {
  components: { TreeItem },
  data() {
    return {
      treeData: [
        {
          id: 1,
          label: 'Parent 1',
          children: [
            {
              id: 2,
              label: 'Child 1',
              children: []
            }
          ]
        }
      ]
    };
  }
};
</script>

样式优化

为树形列表添加基础样式,例如缩进和交互效果:

ul {
  list-style-type: none;
  padding-left: 20px;
}
li div {
  cursor: pointer;
  padding: 5px;
}
li div:hover {
  background-color: #f0f0f0;
}

动态加载数据

若需动态加载子节点,可通过事件触发异步加载:

methods: {
  async loadChildren(node) {
    if (!node.children.length) {
      const response = await fetch(`/api/children/${node.id}`);
      node.children = await response.json();
    }
    this.isOpen = true;
  }
}

使用第三方库

若需更复杂功能,可考虑使用现成的树形组件库,如 vue-tree-list

npm install vue-tree-list

示例集成:

vue cli实现树形列表

<template>
  <vue-tree-list
    :model="treeData"
    @click="onClick"
  />
</template>

<script>
import { VueTreeList } from 'vue-tree-list';

export default {
  components: { VueTreeList },
  data() {
    return {
      treeData: { /* 嵌套结构 */ }
    };
  }
};
</script>

通过以上步骤,可实现一个基础的树形列表,支持递归渲染、动态加载和交互功能。根据实际需求调整数据结构和样式即可。

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

相关文章

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue筛选实现

vue筛选实现

Vue 筛选实现方法 使用计算属性实现筛选 计算属性是 Vue 中实现数据筛选的常用方式。通过定义一个计算属性,可以根据输入的条件动态过滤数据。 <template> <div…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <t…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…