el-tree树状的使用

研究了一下elementUi框架里的tr-tree的用法。趁着现在还有些头热,先记下我所学习到的内容吧。
el-tree在实际工作中使用还是蛮多的,比如权限控制,商品无限级分类……都会用上它。(最终的效果如下图所示)
在这里插入图片描述

//树结构如下
let arr = [{
		value: 1,
		label: '中国',
		children: [{
				value: 3,
				label: '广东',
				children: [{
					value: 5,
					label: '广州'
				}, {
					value: 6,
					label: '梅州',
					children: [{
						value: 90,
						label: '五华'
					}]
				}, ]
			},
			{
				value: 4,
				label: '广西',
				children: [{
					value: 9,
					label: '柳州'
				}]
			}
		]
	},
	{
		value: 2,
		label: '日本'
	}
],

<!--data="treeObj.optionList"   不用多说,就是后端返回的数据,是一个树状数据-->
<!--props="defaultProps"	用来定义data数据里的哪个字段用来做el-tree的children属性,以及label显示的是data数据里的哪个字段-->
<!--node-key	每个树节点用来做为唯一的标识属性,可以简单理解为el-tree 树的id值 -->
<!--check-strictly	表示在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,布尔值-->
<!--check-strictly true,选子组的时候,父级不会关联,而false,选子组的时候,父组也会被选中-->

<!--default-expand-all	是否展开所有,加上这个属性就是展开所有级-->
<!--default-checked-keys 默认选中的id值,是一个数组。当 check-strictly 设为 false时,它会自动沟选父组的框-->
<!--show-checkbox	是否为复选框状态-->
<!--highlight-current	 高亮状态【我本人还没有研究透】-->
<!--treeNodeClick	选中节点时的执行方法-->
<!--filter-node-method	过滤,一般结合 el-input 使用。是一个函数 -->
<template>
	<view class="">
		<view class="myTree">
			<el-input placeholder="请输入节点名称搜索" v-model="filterText"></el-input>
			<el-tree
			  class="filter-tree"
			  :data="treeObj.optionList"
			  :props="defaultProps"        
			  node-key="value"
			  :check-strictly="false"
			  default-expand-all
			  :default-checked-keys="defaultCheckedKeys"
			  show-checkbox
			  :highlight-current='true' 
			  @check="treeNodeClick"
			  :filter-node-method="filterNode"
			  ref="tree">
			</el-tree>
			<u-button type="primary" @click="subTree">确定</u-button>
		</view>
	</view>
</template>

<script>
	export default {
		data(){
			return {
				defaultCheckedKeys:[],
				treeObj:{optionList:arr},
				filterText: '',
				defaultProps: {
					children: 'children',
					label: 'label'
				},
				currentCheckData: {}, // 当前选中的值
				treeData:null
			}
		},
		created() {
			
		},
		props: {},
		watch: {
			//这个是监听输入框变化时重新生成树状结构
			filterText(val) {
				this.$refs.tree.filter(val); //这个是一个固定的写法
			}
		},
		created() {
		},
		mounted() {
		},
		destroyed() {
		},
		methods:{
			filterNode(value, data) {
				if (!value) return true;
				return data.label.indexOf(value) !== -1;
			},
			// 点击时设置单选
			treeNodeClick(data) {//重点在这儿
				//let tempData = this.$refs.tree.getCheckedKeys()
				if(data.hasOwnProperty('children')){
					//判断当前节点是否为最终的节点
					//即该节点是没有子级的
					this.currentCheckData = {}
					//this.$emit('getTreeData', {})
					this.$refs.tree.setCheckedKeys([])
					return false;
				}else{
					if(this.currentCheckData.value === data.value){//返选
						this.currentCheckData = {}
						//this.$emit('getTreeData', {})
						this.$refs.tree.setCheckedKeys([])//反选状态下,重置为空
						this.treeData = null;
					}else{
						this.currentCheckData = data
						//this.$emit('getTreeData', data)
						this.$refs.tree.setCheckedKeys([data.value])
						this.treeData = data;
						//console.log(data);
						//this.$emit('getTreeData',data);
					}
				}
			},
			subTree(){
				let data = this.treeData;
				if(data == null){
					this.$refs.uTips.show({
						title: '请选择一个子节点',
						type: 'warning',
						duration: '2300'
					})					
				}else{
					this.$emit('getTreeData',data);
				}
			}
		}
	}
</script>

<style lang="less" scoped>
	.myTree{
		width: 96%;
		margin: 0 auto;
	}
</style>

先贴一段我学习的代码吧。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值