Tabla de contenido
1. Uso básico
1. Efectos de interfaz
2. Implementación del código
<template>
<div>
<div class="box">
<a-tree-select
v-model="name"
:replaceFields="replaceFields"
:tree-data="treeData"
class="tree-select"
>
</a-tree-select>
</div>
</div>
</template>
<script>
import {
getPkProperty } from '@/api/process-cfg/process-cfg.js'
export default {
data() {
return {
replaceFields: {
children: 'subclasses',
title: 'dsp_class_name',
key: 'class_name',
value: 'class_name'
},
treeData: [],
name: ''
}
},
created() {
this.getSortData()
},
methods: {
async getSortData() {
let result = await getPkProperty()
this.treeData = result.subclasses
}
}
}
</script>
<style>
.box {
margin: 100px;
width: 500px;
height: 500px;
}
.tree-select {
width: 200px;
}
</style>
3. Problema 1: el cuadro desplegable ocupa toda la pantalla
1) Efecto del problema
2) Efecto ideal
3) Código completo
Descripción: establezca dropdownStyle (estilo de menú desplegable), agregue el siguiente código y usted mismo puede ajustar la altura.
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
<template>
<div>
<div class="box">
<a-tree-select
v-model="name"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
:replaceFields="replaceFields"
:tree-data="treeData"
class="tree-select"
>
</a-tree-select>
</div>
</div>
</template>
<script>
import {
getPkProperty } from '@/api/process-cfg/process-cfg.js'
export default {
data() {
return {
replaceFields: {
children: 'subclasses',
title: 'dsp_class_name',
key: 'class_name',
value: 'class_name'
},
treeData: [],
name: ''
}
},
created() {
this.getSortData()
},
methods: {
async getSortData() {
let result = await getPkProperty()
this.treeData = result.subclasses
}
}
}
</script>
<style>
.box {
margin: 100px;
width: 500px;
height: 500px;
}
.tree-select {
width: 200px;
}
</style>
4. Problema 4: cuando el contenido del menú es demasiado largo, el ancho del menú desplegable se vuelve infinitamente más amplio.
1) Efecto problema
2) Efecto ideal
Descripción: tiene el mismo ancho que el cuadro de texto y aparecerá una barra de desplazamiento horizontal cuando el contenido sea demasiado largo.
3) código completo
Descripción: establezca dropdownMatchSelectWidth (el menú desplegable y el selector tienen el mismo ancho).
:dropdownMatchSelectWidth="true"
<template>
<div>
<div class="box">
<a-tree-select
v-model="name"
:dropdownMatchSelectWidth="true"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
:replaceFields="replaceFields"
:tree-data="treeData"
class="tree-select"
>
</a-tree-select>
</div>
</div>
</template>
<script>
import {
getPkProperty } from '@/api/process-cfg/process-cfg.js'
export default {
data() {
return {
replaceFields: {
children: 'subclasses',
title: 'dsp_class_name',
key: 'class_name',
value: 'class_name'
},
treeData: [],
name: ''
}
},
created() {
this.getSortData()
},
methods: {
async getSortData() {
let result = await getPkProperty()
this.treeData = result.subclasses
}
}
}
</script>
<style>
.box {
margin: 100px;
width: 500px;
height: 500px;
}
.tree-select {
width: 200px;
}
</style>
2. Eco de datos, posicionamiento de la barra de desplazamiento
1. Efectos de interfaz
Descripción: repite el último contenido seleccionado, expande el nodo y su nodo principal de forma predeterminada y coloca automáticamente la barra de desplazamiento en el nodo seleccionado.
2. Implementación del código
Idea: 1) Establecer el nodo expandido predeterminado
treeDefaultExpandedKeys
2) Colocar la barra de desplazamiento en el nodo seleccionado
2.1 Obtener el nodo expandido predeterminado
Idea:
1) Según la clave del nodo seleccionado, busque las claves de todos los nodos principales de este nodo. Aquí se utiliza el método encapsulado en la biblioteca xe-utils .
2) Dado quefindTree
el método tiene un formato de datos específico, necesitamos formatear los datos (clave: id, niño: 'niños'), y el lado derecho es el formateado.
3) El método de formato esmapTree
.
2.1.1 Implementación del código
getExpandKeys(id) {
// 1.数据格式化
let newTree = XEUtils.mapTree(
this.treeData, // 格式化树数据
(item) => {
return {
id: item.class_name // id对应的字段名
}
},
{
children: 'subclasses', // 子数组对应的字段名
mapChildren: 'children' // 子数组格式化后的名称
}
)
// 2.找到节点路径
let data = XEUtils.findTree(newTree, (item) => item.id === id)
// 3.获取默认展开节点
this.treeDefaultExpandedKeys = data.nodes.map((item) => item.id)
}
2.1.2 Descripción
1) método mapTree
- API
- Datos formateados: solo id (clave), la submatriz son hijos
2) método encontrarárbol
- API
- Visualización de datos de retorno:
2.2 Establecer la posición de la barra de desplazamiento
2.2.1 Nota: Busque el nombre del estilo seleccionado; consulte la figura siguiente.
2.2.2 Implementación del código
setTimeout(() => {
this.treeDefaultExpandedKeys = data.nodes.map((item) => item.id)
}, 500)
setTimeout(() => {
if (
document.getElementsByClassName('ant-select-tree-node-selected')
.length > 0
) {
document
.getElementsByClassName('ant-select-tree-node-selected')[0]
.scrollIntoView()
}
}, 1000)
3. Código completo
<template>
<div>
<div class="box">
<a-tree-select
v-model="name"
:dropdownMatchSelectWidth="true"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
:replaceFields="replaceFields"
:treeDefaultExpandedKeys="treeDefaultExpandedKeys"
:tree-data="treeData"
class="tree-select"
v-if="treeData.length > 0"
>
</a-tree-select>
</div>
</div>
</template>
<script>
import {
getPkProperty } from '@/api/process-cfg/process-cfg.js'
import XEUtils from 'xe-utils'
export default {
data() {
return {
replaceFields: {
children: 'subclasses',
title: 'dsp_class_name',
key: 'class_name',
value: 'class_name'
},
treeData: [],
name: '',
treeDefaultExpandedKeys: []
}
},
async created() {
await this.getSortData()
await this.echoData()
},
methods: {
async getSortData() {
let result = await getPkProperty()
this.treeData = result.subclasses
},
async echoData() {
// 1.获取回显数据
this.name = '国外花键轴磨床'
// 2.获取默认展开节点
this.getExpandKeys(this.name)
},
getExpandKeys(id) {
// 1.数据格式化
let newTree = XEUtils.mapTree(
this.treeData,
(item) => {
return {
id: item.class_name
}
},
{
children: 'subclasses',
mapChildren: 'children'
}
)
// 2.找到节点路径
let data = XEUtils.findTree(newTree, (item) => item.id === id)
// 3.设置展开的key
setTimeout(() => {
this.treeDefaultExpandedKeys = data.nodes.map((item) => item.id)
}, 500)
setTimeout(() => {
if (
document.getElementsByClassName('ant-select-tree-node-selected')
.length > 0
) {
document
.getElementsByClassName('ant-select-tree-node-selected')[0]
.scrollIntoView()
}
}, 1000)
}
}
}
</script>
<style>
.box {
margin: 100px;
width: 500px;
height: 500px;
}
.tree-select {
width: 200px;
}
</style>