初次使用级联选择器遇到的一些小问题(适用新手或者跟我一样容易迷糊的银)
1.输入后输入框无选定值显示
props属性用于配置选项,label,value,children分别设置为对应显示属性,值,子节点。选择后无显示值可能是props配置写错了,检查一下单词是否拼写错误,比如label写成了lable
2.动态懒加载
官网示例:
<el-cascader :props="props"></el-cascader>
props: {
lazy: true,
lazyLoad (node, resolve) {
const { level } = node;
setTimeout(() => {
const nodes = Array.from({ length: level + 1 })
.map(item => ({
value: ++id,
label: `选项${id}`,
leaf: level >= 2
}));
// 通过调用resolve将子节点数据返回,通知组件数据加载完成
resolve(nodes);
}, 1000);
}
其中,只需要将const nodes = 【请求数据的异步函数,返回的是一个数组】
.map(item=> ({
value: item.value属性值
label: item.label属性值
leaf: level >= 2 }));
稍作修改即可,注意resolve中传递的数据必须是map遍历修改后的数据,切记不要传成原数据。
动态加载示例:
html:
<el-cascader
:props="props"
v-model="value"
></el-cascader>
<template #default="{ node, data }">
<span>{{ data.name }}</span>//要显示的属性名
</template>
js:
props: {
lazy: true,
value:'id',
label:'name',//两项必须配置,否则页面无显示
lazyLoad:async (node, resolve) {
const {value, level } = node;//value是点击后获取的值,再去请求下一次异步数据,根据level 判断是第几级
let nodes=[];
if(level==0){
nodes=第一次异步请求数据
}else{
nodes=第二次异步数据(value)
}
nodes=nodes. .map(item => ({
value: item.value
label: item.name
leaf: level >= 1//数值根据你的选择器层级来确定
}));
resolve(nodes);
}
}
};
3.如果你的叶子节点数据仍有>符号显示还有下一级数据,在map时手动添加leaf属性布尔值,true则是叶子节点数据。
(菜鸡一枚,欢迎老司机带带我)