vue.js树型结构实现
2017-03-19 19:21
435 查看
参考:http://www.cnblogs.com/ychl/p/6075106.html
虽然文章给出的方法可以实现树结构,使用的图标是boostrap提供的fa类别的图标。参考文献中的代码:
但是如果使用的话,还需要做一些修改
1. 去掉li标签
2. 为了使得可以选中的子节点能够返回父控件,增加交互性,需要可以让子控件能够传递给父控件数据,但是子控件是循环嵌套的,因此需要层层上传,直到父控件。
采用:子控件像父控件传送数据
父控件调用:
template中:
数据类型
var data = [{
"id": "1",
"data": {
"menuName": "项目管理",
"menuCode": "",
},
"childTreeNode": [{
"data": {
"menuName": "项目",
"menuCode": "BusProject",
},
"childTreeNode": []
}, {
"data": {
"menuName": "我的任务",
"menuCode": "BusProject",
},
"childTreeNode": []
}, {
"data": {
"menuName": "人员周报",
"menuCode": "BusProject",
},
"childTreeNode": []
}]
}, {
"id": "2",
"data": {
"menuName": "数据统计",
"menuCode": "BusClock",
},
"childTreeNode": []
}, {
"id": "3",
"data": {
"menuName": "人事管理",
"menuCode": "",
},
"childTreeNode": []
}, {
"id": "4",
"data": {
"menuName": "基础管理",
"menuCode": "",
},
"childTreeNode": []
}]
虽然文章给出的方法可以实现树结构,使用的图标是boostrap提供的fa类别的图标。参考文献中的代码:
父组件中引入items <items :model='model' v-for='model in data'></items> 以下是items.vue的内容 <template> <li> <div @click='toggle'> <i v-if='isFolder' class="fa " :class="[open?'fa-folder-open':'fa-folder']"></i> <!--isFolder判断是否存在子级改变图标--> <i v-if='!isFolder' class="fa fa-file-text"></i> {{model.data.menuName}} </div> <ul v-show="open" v-if='isFolder'> <items v-for='cel in model.childTreeNode' :model='cel'></items> </ul> </li> </template> <script type="text/javascript"> export default { name: 'items', props: ['model'], components: {}, data() { return { open: false, isFolder: true } }, computed: { isFolder: function() { return this.model.childTreeNode && this.model.childTreeNode.length } }, methods: { toggle: function() { if(this.isFolder) { this.open = !this.open } }, } } </script>
但是如果使用的话,还需要做一些修改
1. 去掉li标签
<li style="list-style-type:none;"> <div @click='toggle'> <i v-if='isFolder' class="fa " :class="[open?'fa-folder-open':'fa-folder']"></i> <!--isFolder判断是否存在子级改变图标--> <i v-if='!isFolder' class="fa fa-file-text"></i> {{model.data.menuName}} </div> <ul v-show="open" v-if='isFolder'> <items v-for='cel in model.childTreeNode' :model='cel'></items> </ul> </li>
2. 为了使得可以选中的子节点能够返回父控件,增加交互性,需要可以让子控件能够传递给父控件数据,但是子控件是循环嵌套的,因此需要层层上传,直到父控件。
采用:子控件像父控件传送数据
<template> <li style="list-style-type:none;"> <div @click='toggle'> <i v-if='isFolder' class="fa text-yellow" :class="[open?'fa-folder-open':'fa-folder']" ></i> <!--isFolder判断是否存在子级改变图标--> <i v-if='!isFolder' class="fa fa-file-text text-blue" ></i> {{model.data.menuName}} </div> <ul v-show="open" v-if='isFolder'> <items v-for='cel in model.childTreeNode' :model='cel' @upup="change" :choose="choose"></items> </ul> </li> </template> <script type="text/javascript"> import $ from 'jquery'; var VueRouter = require('vue-router'); export default { name: 'items', props: ['model'], components: {}, data() { return { open: false, isFolder: true, choose:'' } }, computed: { isFolder: function() { return this.model.childTreeNode && this.model.childTreeNode.length b347 } }, methods: { change(choose){ this.choose=choose; this.$emit('upup',this.choose); }, toggle: function() { this.choose=this.model.data.menuCode; this.$emit('upup',this.choose); if(this.isFolder) { this.open = !this.open } }, } } </script>
父控件调用:
template中:
<items :model='model' @upup="change" :choose="choose" v-for='model in data'></items> {{choose}}script中:
import items from "../../components/items.vue"; module.exports = { components: { items }, data: function() { return { choose:'' } methods: { change(choose){ this.choose=choose; } }
数据类型
var data = [{
"id": "1",
"data": {
"menuName": "项目管理",
"menuCode": "",
},
"childTreeNode": [{
"data": {
"menuName": "项目",
"menuCode": "BusProject",
},
"childTreeNode": []
}, {
"data": {
"menuName": "我的任务",
"menuCode": "BusProject",
},
"childTreeNode": []
}, {
"data": {
"menuName": "人员周报",
"menuCode": "BusProject",
},
"childTreeNode": []
}]
}, {
"id": "2",
"data": {
"menuName": "数据统计",
"menuCode": "BusClock",
},
"childTreeNode": []
}, {
"id": "3",
"data": {
"menuName": "人事管理",
"menuCode": "",
},
"childTreeNode": []
}, {
"id": "4",
"data": {
"menuName": "基础管理",
"menuCode": "",
},
"childTreeNode": []
}]
相关文章推荐
- 【079】利用“剪叶子”算法实现树形结构的搜索功能,用Vue.js实现
- vue.js与element-ui实现菜单树形结构的解决方法
- 在struts里的实现dtree通用树型结构
- 蛙蛙推荐:asp实现树型结构
- SkyTree-便于在各种浏览器中实现动态的树型结构显示
- 实现论坛树型结构的具体算法
- 通过Repeater实现树型结构
- 实现论坛树型结构的具体算法
- DataGrid的嵌套,实现树型结构
- .net之旅-树型结构及相关功能的实现(41)
- js树型菜单的实现原理
- 实现论坛树型结构的具体算法
- 树型目录的XML实现(二)jsp+XML+js,跟CSDN的论坛列表相同?
- 实现论坛树型结构的具体算法
- DataGrid的牵套,实现树型结构.
- ASP实现的无限级会员树型结构
- 利用JavaScript实现树型结构的TreeView类!(源代码,欢迎大家指教
- asp实现树型结构
- 树型目录的XML实现(二)jsp+XML+js,跟CSDN的论坛列表相同?
- 可伸缩的树型结构js文件