美文网首页
Vue 树形菜单封装

Vue 树形菜单封装

作者: 取个帅气的名字真好 | 来源:发表于2019-05-26 00:03 被阅读0次
效果图

item.vue

<template>
    <li>
        <span @click="toggle" >
            <span v-if="hasChild" >{{isOpen ? '🌚' : '🌝'}}</span>
            <!-- 末节点 -->
            <span v-if="!hasChild" >🌞</span> 
            {{ data[treeProps.label] }}
        </span>
        <ul v-show="isOpen" v-if="hasChild">
            <tree-item v-for="(item, index) in data[treeProps.children]" :data="item" :key="index" :treeProps="treeProps" ></tree-item>
        </ul>
    </li>
</template>

<script>
export default {
    name: 'TreeItem', //递归组件必须有name
    props: {
        data: {
            type: [Object, Array], //多个可能的类型
            required: true
        },
        // label、children 默认值
      treeProps:{
          type:Object,
          default:()=>({
            children:'children',
            label:'label'
          })
        }
    },
    data() {
        return {
            isOpen: false,
        }
    },
    computed: {
      // 判断当前级别是否还有children
        hasChild() {
            return this.data[this.treeProps.children] && this.data[this.treeProps.children].length
        }
    },
    methods: {
      // 点击子菜单也要判断是否有children,有就展开
        toggle() {
            if(this.hasChild) {
                this.isOpen = !this.isOpen
            }
        }
    }
}
</script>

<style>
ul {
    list-style: none;
    margin: 10px 0;
    padding-left: 20px;
}
li {
      color: #000;
}
li > span {
    cursor: pointer;
    font-size: 14px;
    line-height: 20px;
}
</style>

index.vue

<template>
  <div>
    <ul v-for="(item,index) in data" :key="index">
      <tree-item :data="item" :treeProps="treeProps"></tree-item>
    </ul>
  </div>
</template>

<script>
  import treeItem from './item'
  export default {
    props: {
      data: {
        type: [Object, Array],
        required: true
      },
      treeProps: {
        type: Object,
        default: () => ({
          children: 'children',
          label: 'label'
        })
      }
    },
    components: {
      treeItem
    },
  }
</script>

使用

<template>
  <div id="test">
    <trees :data="treeData" :treeProps="propsxxx"></trees>
  </div>
</template>

<script>
  import trees from "./../test/index";
  export default {
    data() {
      return {
        propsxxx: {
          children: 'children',
          label: 'name'
        },
        treeData: [{
            name: "一级 1",
            children: [{
              name: "二级 1-1",
              children: [{
                name: "三级 1-1-1"
              }]
            }]
          },
          {
            name: "一级 2",
            children: [{
                name: "二级 2-1",
                children: [{
                  name: "三级 2-1-1"
                }]
              },
              {
                name: "二级 2-2",
                children: [{
                  name: "三级 2-2-1"
                }]
              }
            ]
          },
          {
            name: "一级 3",
            children: [{
                name: "二级 3-1",
                children: [{
                  name: "三级 3-1-1"
                }]
              },
              {
                name: "二级 3-2",
                children: [{
                  name: "三级 3-2-1"
                }]
              }
            ]
          }
        ]
      };
    },
    components: {
      trees
    }
  };
</script>

数据递归可以看看我另一篇文章使用递归实现树状菜单

相关文章

  • Vue 树形菜单封装

    item.vue index.vue 使用 数据递归可以看看我另一篇文章使用递归实现树状菜单

  • 父子组件通信

    vue之父子组件间通信实例讲解(props、emit) Vue.js 递归组件实现树形菜单(实例分享)

  • vue封装树形组件

    最近在做一个vue的项目,独立封装树形组件。先说一下项目需求:1.项目原型: 此树形结构分为三级:根节点,一级节点...

  • vue树形菜单链接博客

    链接地址: https://www.cnblogs.com/caihg/p/6208105.html

  • 电量运维客户端

    1, ./script/qbUtil.js 文件下封装的是大部分的数据请求方法,树形结构菜单的渲染 2, ./sc...

  • 树形菜单和自定义右键菜单

    一、树形菜单 二、自定义右键菜单

  • 树形菜单

    实现方式 1.通过mybatis编写xml 2.通过递归算法获取

  • Vue+element ui树形菜单

    效果图: 源码: Title

  • vue组件递归

    管理系统中很多这样树形菜单显示的,这里要用到组件的递归来完成,这里我们来学习下vue关于组件递归的实现。 ...

  • easyUI 实现tree树形菜单json的处理

    今天使用easyUI想完成一个树形菜单,后台部分的已经写好,传json给前端显示菜单。 发现easyui处理树形菜...

网友评论

      本文标题:Vue 树形菜单封装

      本文链接:https://www.haomeiwen.com/subject/sjfttctx.html