有幸用过这个ant组件 一言难尽!! 了解到这个组件默认不透露父节点信息 所以处理是真的麻烦 ,我这个需求是选中子节点要把它的父节点展示出来!开始用了很多捷径都没成功,最后用循环加递归踏踏实实的去找到它的父节点
代码段:html
<a-tree
v-if="treeData.length"
show-search
:checkedKeys="checkedKeys"
:treeData="treeData"
checkable
:selectable="false"
v-model="selectedKeys"
@select="onSelect"
@check="onCheck"
<template slot="name" slot-scope="{ name }">
<span v-html="name.replace(new RegExp(searchValue, 'g'), '<span style=color:#f50>' + searchValue + '</span>')"></span>
</template>
</a-tree>
js数据源
data() {
return {
checkedKeys: [],
checkedList:[],
selectedKeys: [],
searchValue: '',
treeData: [
id:"0",
name: '下管街道',
key: '0',
scopedSlots: { title: 'name' },
checkable: false,
children: [
name: '金星社区',
key: '0-0',
id:"00",
scopedSlots: { title: 'name' },
checkable: false,
children: [
id:"000",
name: '张三-网格员',
key: '0-0-0',
scopedSlots: { title: 'name' },
id:"001",
name: '李四-市容管理网格员',
key: '0-0-1',
scopedSlots: { title: 'name' },
id:"002",
name: '王五-网格员',
key: '0-0-2',
scopedSlots: { title: 'name' },
id:"003",
name: '赵四-环卫网格员',
key: '0-0-3',
scopedSlots: { title: 'name' },
name: '和平社区',
key: '0-1',
id:"01",
scopedSlots: { title: 'name' },
checkable: false,
children: [
id:"010",
name: '刘琴-网格员',
key: '0-1-0',
scopedSlots: { title: 'name' },
id:"011",
name: '王雪-市容管理网格员',
key: '0-1-1',
scopedSlots: { title: 'name' },
id:"012",
name: '李梅-环卫网格员',
key: '0-1-2',
scopedSlots: { title: 'name' },
checkedKeys:[],
searchStr: '',
//获取父节点
onCheck(checkedKeys) {
var tempArr = [];
if(this.checkedKeys.length>0){
console.log(this.checkedKeys[0].split("-"))
for(let a=0;a<this.checkedKeys.length;a++){
var tempA = this.checkedKeys[a].split("-");
var index = 0;
var tempStr = "";
var data = this.treeData[0];
var id = 0;
var temFuc = ()=>{
index++;
if(tempA.length-index>=0){
console.log(index)
if(tempStr){
tempStr = tempStr+"-"+data.name;
}else{
tempStr = data.name;
if(data.children){
data = data.children[tempA[index]];
}else{
id = data.id;
temFuc();
temFuc();
tempArr.push({
text:tempStr,
keys:this.checkedKeys[a],
id:id
this.checkedList = tempArr;
console.log(this.checkedKeys)
可以拿到以下俩组数据:
请根据你的实际数据结构和需求调整此代码。如果你的树形数据没有包含父节点的引用,你可能需要先处理原始数据以构建这种关系。:确保每个节点数据中包含对其父节点的引用。例如,你可以在每个节点对象中添加一个。组件中,当选择子节点时获取其父节点的 ID,你需要利用。的数据以树形结构存储,每个节点都有一个唯一的。事件回调中,你可以根据选中的节点的。组件提供的数据和事件回调。在 Ant Design 的。)和一个指向其父节点的引用。查找其对应的父节点 ID。
在antd对Treeselect组件的渲染中,onChange事件是无法获取父元素的值的,官方解释是处于对性能的考虑,没有对父元素进行关联。
文档末尾也给出了如何获取父元素值的方法,解题思路是:根据treeData的数据结构利用递归回溯去查找父节点的值
忠于文档~
import React from "react";
import { TreeSelect } from "antd";
import { Post } from "../../api/index";
const valueMap = {}
a-tree-select和a-select组件使用方式差不多,采用 labelInValue,此时绑定的内容包含label和value
<a-tree-select
:label-in-value="true"
style="width: 3rem"
v-model="type"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
:tree-data="typeTreeList"
前言:写项目的时候,后台返回了个树形结构的数据,要求前端保存的时候,传给后台选取的子节点和父节点的信息;1.因为后台返回的数据比较多,渲染之后用户不太容易选择,因此就用了Ant Design的模糊搜索的方法;2.Ant Design 的树选择,只提供了获取选取当前节点的信息,如何获取当前节点的父节点的信息。结尾:比较难的部分就是最后一个如何获取父节点的信息;3.如何渲染后台返回的树结构的数据。获取当前节点和父节点;
v-model='businessSelectedRowKeys'
@check="onBusinessSelectChange"
:treeData='businessData'
:checkedKeys="businessSelectedRowKeys"
:autoExpandParent="true"