最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单。

main.js 作为入口:

import Vue from 'vue'

import main from './components/main.vue'

new Vue({

el: '#app',

render: h => h(main)

})

它引入了一个组件 main.vue:

const myData = [

{

id: '1',

menuName: '基础管理',

menuCode: '10'

},

{

id: '2',

menuName: '商品管理',

menuCode: ''

},

{

id: '3',

menuName: '订单管理',

menuCode: '30',

children: [

{

menuName: '订单列表',

menuCode: '31'

},

{

menuName: '退货列表',

menuCode: '32',

children: []

}

]

},

{

id: '4',

menuName: '商家管理',

menuCode: '',

children: []

}

];

const subMenuData1 = {

parentId: '1',

children: [

{

menuName: '用户管理',

menuCode: '11'

},

{

id: '12',

menuName: '角色管理',

menuCode: '12',

children: [

{

menuName: '管理员',

menuCode: '121'

},

{

menuName: 'CEO',

menuCode: '122'

},

{

menuName: 'CFO',

menuCode: '123'

},

{

menuName: 'COO',

menuCode: '124'

},

{

menuName: '普通人',

menuCode: '124'

}

]

},

{

menuName: '权限管理',

menuCode: '13'

}

]

};

const subMenuData2 = {

parentId: '2',

children: [

{

menuName: '商品一',

menuCode: '21'

},

{

id: '22',

menuName: '商品二',

menuCode: '22',

children: [

{

menuName: '子类商品1',

menuCode: '221'

},

{

menuName: '子类商品2',

menuCode: '222'

}

]

}

]

};

import myTree from './common/treeMenu.vue'

export default {

components: {

myTree

},

data () {

return {

theData: myData,

menuName: 'menuName', // 显示菜单名称的属性

loading: false

}

},

methods: {

getSubMenu (menuItem, callback) {

this.loading = true;

if (menuItem.id === subMenuData1.parentId) {

this.loading = false;

menuItem.children = subMenuData1.children;

callback(menuItem.children);

}

setTimeout(() => {

if (menuItem.id === subMenuData2.parentId) {

this.loading = false;

menuItem.children = subMenuData2.children;

callback(menuItem.children);

}

}, 2000);

}

}

}

subMenuData1, subMenuData2 存放子菜单数据,可以从服务器获取,以实现动态加载。

该文件引入了树形组件 treeMenu.vue:

  • {{ item[name] || item.menuName }}

export default {

name: 'treeMenu',

props: {

data: Array,

name: String,

loading: Boolean

},

data () {

return {

folderIconList: [],

loadingIconList: [],

scope: {}

}

},

created () {

this.data.forEach((item, index) => {

if (item.children && item.children.length) {

this.folderIconList[index] = 'folder';

}

});

},

methods: {

doTask (index) {

this.$set(this.scope, index, !this.scope[index]);

this.folderIconList[index] = this.scope[index] ? 'folder-open' : 'folder';

},

toggle (item, index) {

this.loadingIconList = [];

if (item.children && item.children.length) {

this.doTask(index);

} else {

this.loadingIconList[index] = 'loading';

this.$emit('getSubMenu', item, (subMenuList) => {

if (subMenuList && subMenuList.length) {

this.doTask(index);

}

});

}

}

}

}

.tree-menu {

list-style: none;

}

.tree-menu li {

line-height: 2;

}

.tree-menu li span {

cursor: default;

}

.icon {

display: inline-block;

width: 15px;

height: 15px;

background-repeat: no-repeat;

vertical-align: -2px;

}

.icon.folder {

background-image: url(/src/assets/folder.png);

}

.icon.folder-open {

background-image: url(/src/assets/folder-open.png);

}

.icon.file-text {

background-image: url(/src/assets/file-text.png);

}

.icon.loading {

background-image: url(/src/assets/loading.gif);

background-size: 15px;

}

效果图:

示例代码放在这里。

vue树形权限菜单_Vue.js 递归组件实现树形菜单相关推荐

  1. vue树形权限菜单_Vue.js 递归组件实现树形菜单(实例分享)

    最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: import Vue from 'vue' Vue.config.debug = tr ...

  2. vue 递归组件多级_Vue递归组件实现树形结构菜单

    Tree 组件是递归类组件的典型代表,它常用于文件夹.组织架构.生物分类.国家地区等等,世间万物的大多数结构都是树形结构.使用树控件可以完整展现其中的层级关系,并具有展开收起选择等交互功能. 如图所示 ...

  3. vue的递归组件以及三级菜单的制作

    js里面有递归算法,同时,我们也可以利用props来实现vue模板的递归调用,但是前提是组件拥有 name 属性 父组件:slotDemo.vue: <template><div&g ...

  4. react重新渲染菜单_React实现递归组件

    前言 今天来实现一个 React 的递归组件.具体的效果图如下: 图片说明 假设后端返回的数据如下: [{ id: 1, parent_id: 0, name: '广东省', children: [{ ...

  5. angular移除事件绑定事件绑定_Vue.js子组件利用事件向父组件传输数据,以及sync修饰符和双向绑定...

    在Vue.js的组件中,prop是"单向绑定"的,数据只能从父组件传输到子组件.Vue文档中的说了这样做的原因: 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑 ...

  6. Vue动态查询条件-Vue动态查询规则-Vue多条件分组组合查询-递归组件(一):前端

    先看最终的效果: 最近项目上有一个需求,VUE前端要实现动态查询条件组件,后端就能够动态组装SQL. 要模仿人家Azure Devops的查询功能,我丢,Azure Devops是人家微软开发的个东西 ...

  7. vuejs 传参 向 子组件 父组件_VUe.js 父组件向子组件中传值及方法

    父组件向子组件中传值 1.  Vue实例可以看做是大的组件,那么在其内部定义的私有组件与这个实例之间就出现了父子组件的对应关系. 2. 父子组件在默认的情况下,子组件是无妨访问到父组件中的数据的,所以 ...

  8. vue 树形控件可编辑_vue.js element-ui组件改iview 第一期 tree树形控件

    此为第一期修改,后期也适配了其他组件,更多查看我得文章 element-ui组件的tree树形控件修改源码改为iview组件 实现原理 修改了element-ui源码,把源码里面的tree模块提取出来 ...

  9. vue就地复用不是更快吗_Vue.js从零开始——组件(1)

    其实本来应该把这个章节也放在入门里面的,但是想想这个部分是 Vue 的核心功能之一,所以就独立出来吧,专门进行介绍也挺好的. 这个章节主要是对 Vue 的组件(Component)有个基础的了解先,也 ...

最新文章

  1. WebForm中使用MVC
  2. openStack controller 管理网口TX数据量非常大 网络总是丢包
  3. 页面性能的基础因素 - 《Designing for Performance》
  4. 排版 项目 html,实现HTML自动排版的法则2_html
  5. autowired java配置_Spring自动注解标签@Autowired不能注入xml配置的bean吗?
  6. mysql5.6.22.0安装_皮带机滚筒用圆锥孔调心滚子轴承锁紧安装工艺
  7. volatile关键字的作用-适用场景
  8. 指针运算符 * 说明
  9. Docker详解(八)——Docker镜像制作
  10. vue 导出excel文件
  11. 西班牙出差见闻之一(出发)
  12. 数据预处理之无量纲化、缺失值处理(三)
  13. 3D Tiles Next
  14. 全国各区县经纬度查询困难?精度不够?试试自制市区县经纬度查询工具并将数据保存本地
  15. vue-cli自动化测试karma + mocha + chai
  16. 赛迪视点 | 新冠疫情下的中国集成电路产业发展
  17. V-token的技术革新,引领数字化支付热潮
  18. ffplay 内存优化
  19. 链接:https://pan.baidu.com/s/1U-UlYoranUvpfj97XLrHvQ 提取码:ZMTD
  20. 最新PHP开源采集器/蓝天采集器系统源码

热门文章

  1. 机器学习代码实战——网格搜索和交叉验证(GridSearchCV)
  2. Numpy——numpy的索引
  3. LeetCode 357. 计算各个位数不同的数字个数(动态规划)
  4. 机器学习——KNN及代码实现
  5. 模拟任务调度算法 C语言 【留学生作业】
  6. js学习总结----深入扩展-js同步与异步编程
  7. Fragment的知识总结
  8. 杨振宁惹谁了?(zz)
  9. POJ1212 HDU1650 UVA180 LA5240 Eeny Meeny【约瑟夫环】
  10. POJ NOI0113-6 最长单词2【文本处理】