目录场景描述效果图如下:数据结构如下:先贴上html部分然后再贴上data数据中的部分回显的方法:总结场景描述 后台返回类目数组,其中有一级类目;二级类目,三级类目;这种情况下如何回
后台返回类目数组,其中有一级类目;二级类目,三级类目;这种情况下如何回显数据
先给大家展示一些数据结构,后面会给大家一一讲解;尤其是回显那部分
[
{
id:1, level:0,pid:0,name:'测试1'
},
{
id:2, level:0,pid:0,name:'测试2'
},
{
id:11, level:1,pid:1,name:'测试1-1'
},
{
id:12, level:2,pid:11,name:'测试1-1-1'
}
]
<el-cascader :props="cateGoryProps"
v-model="cascaderData"></el-cascader>
这儿需要注意几个点:
label、value需要改为你数据结构一致的字段;
lazyLoad函数中的node有许多参数,如果目前的不能满足你的需求;你可以查看里面的一些参数是否有你需要的数值;
现在data中的lazyLoad函数主要是一些默认值;
cascaderData: '12',
categoryProps: {
emitPath: false,
label:'name', // 字段必须统一
value:'id', // 字段必须统一
lazy: true,
lazyLoad (node, resolve) {
const { level,value } = node;
console.log(value);
let nodes = [];
if (level == 0) { // 第一级
nodes = catalogueList.filter(v=>{return v.level == 0});
}else { // 后面两级
nodes = catalogueList.filter(v=>{return v.pid == value});
};
resolve(nodes.map(v=>({
id: v.id,
name: v.name,
leaf: level >= 2
})));
}
}, // 级联选择器显示数据
将以下方法赋值给lazyLoad函数即可实现回显了;
逻辑:
setLazyLoad(node, resolve) {
const { level,value } = node;
const cascaderData = this.cascaderData;
// 第一级数据
let nodes = [];
nodes = catalogueList.filter(v=>{return v.level == 0});
// 选中的第三级某位数据
const threeFind = catalogueList.find(v=>{return v.id == cascaderData});
if (value) {
// 查询数据
const unknownFind = catalogueList.find(v=>v.id == value);
if (level == 1) {
let twoData = catalogueList.filter(v=>v.pid == unknownFind.id);
nodes = twoData; // 第二级
}else if (level == 2) {
let threeData = catalogueList.filter(v=>v.pid == unknownFind.id);
nodes = threeData.map(v=>{return {id:v.id,name:v.name,level:v.level,leaf:true}}); // 第三级
};
}else {
// 选中的第二级某位数据
let twoFind = catalogueList.find(v=>v.id == threeFind.pid);
// 第三级数据
let threeData = catalogueList.filter(v=>v.pid == twoFind.id);
// 选中的第一级某位数据
const oneFind = catalogueList.find(v=>{return v.id == twoFind.pid});
// 第二级数据
let twoData = catalogueList.filter(v=>{return v.pid == oneFind.id});
// nodes = nodes.map(v=>{return {id:v.id,name:v.name,level:v.level}}); // 第一级
const oneIndex = nodes.findIndex(v=>{return v.id == oneFind.id});
nodes[oneIndex].children = twoData; // 第二级
const twoIndex = nodes[oneIndex].children.findIndex(v=>v.id == twoFind.id);
nodes[oneIndex].children[twoIndex].children = threeData.map(v=>{ // 第三季
return {
id:v.id,
name:v.name,
level:v.level,
leaf: true,
}
});
}
resolve(nodes);
},
到此这篇关于element-ui动态级联选择器回显问题解决的文章就介绍到这了,更多相关element-ui动态级联选择器回显内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: element-ui动态级联选择器回显问题详解(二十多行代码搞定)
本文链接: https://lsjlt.com/news/197998.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0