当前位置:首页 > VUE

vue实现简单树

2026-03-08 02:56:01VUE

Vue 实现简单树形结构

使用 Vue 实现树形结构可以通过递归组件或第三方库完成。以下是两种常见方法:

递归组件实现

创建递归组件 TreeItem,通过组件自身调用自身实现无限层级嵌套:

<template>
  <div>
    <div @click="toggle">
      {{ node.name }}
      <span v-if="hasChildren">{{ isOpen ? '-' : '+' }}</span>
    </div>
    <div v-show="isOpen && hasChildren">
      <TreeItem 
        v-for="child in node.children" 
        :key="child.id" 
        :node="child"
      />
    </div>
  </div>
</template>

<script>
export default {
  name: 'TreeItem',
  props: {
    node: Object
  },
  data() {
    return {
      isOpen: false
    }
  },
  computed: {
    hasChildren() {
      return this.node.children && this.node.children.length
    }
  },
  methods: {
    toggle() {
      if (this.hasChildren) {
        this.isOpen = !this.isOpen
      }
    }
  }
}
</script>

在父组件中使用:

vue实现简单树

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

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

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

使用第三方库

安装 vue-tree-halower 库:

npm install vue-tree-halower

使用示例:

vue实现简单树

<template>
  <div>
    <tree
      :data="treeData"
      :options="options"
      @node:selected="onNodeSelected"
    />
  </div>
</template>

<script>
import { Tree } from 'vue-tree-halower'

export default {
  components: { Tree },
  data() {
    return {
      treeData: [
        {
          text: 'Parent',
          children: [
            { text: 'Child 1' },
            { text: 'Child 2' }
          ]
        }
      ],
      options: {
        roots: ['text'],
        editable: true
      }
    }
  },
  methods: {
    onNodeSelected(node) {
      console.log('Selected node:', node)
    }
  }
}
</script>

样式定制

为树形组件添加基础样式:

.tree-node {
  padding: 5px;
  cursor: pointer;
}

.tree-node:hover {
  background-color: #f5f5f5;
}

.tree-children {
  margin-left: 20px;
}

功能扩展

添加复选框功能:

<template>
  <div>
    <input 
      type="checkbox" 
      v-model="node.checked"
      @change="onCheckChange"
    >
    {{ node.name }}
    <div v-show="isOpen && hasChildren">
      <TreeItem 
        v-for="child in node.children" 
        :key="child.id" 
        :node="child"
      />
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    onCheckChange() {
      this.$emit('checked', this.node)
    }
  }
}
</script>

这些方法提供了从基础到进阶的树形结构实现方案,可根据项目需求选择适合的方式。

标签: 简单vue
分享给朋友:

相关文章

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue实现高亮

vue实现高亮

Vue 实现文本高亮的方法 在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-html 指令 通过 v-html 指令可以动态插入 HTML 内容,将需要高…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…

vue登录实现

vue登录实现

Vue 登录实现 实现登录功能通常需要前端与后端配合,Vue 作为前端框架,主要负责表单处理、请求发送和状态管理。以下是常见的实现方式: 表单设计与数据绑定 使用 Vue 的 v-model 实现表…