element el-cascader动态加载数据 (多级联动,落地方案)

data() {

return {

value: [], // 多级联动的值 => 会是一个数组

props: {

lazy: true,

lazyLoad: (node, resolve) => {

// node 节点数据 node.value => 当前节点的值

// level: 层级 => 1,2,3,4

const { level } = node;

// 动态节点

const nodes = [];

// 为1代表第一次请求

let type = level == 0 ? “1” : node.value;

this.provinceFn(type)

.then((res) => {

if (res.code == -1) {

this.msgFn(“error”, res.message);

return;

}

// 节点数组

res.data.map((item) => {

// obj里的键值是官方要求的

let obj = {

value: item.city_id,

label: item.city_name,

leaf: node.level >= 3,

};

nodes.push(obj);

});

// resolve 节点返回

resolve(nodes);

})

.catch((error) => {

console.log(error);

});

},

},

};

}

FAQ

注释其实已经非常详细了,整体思路是这样的:

  1. 根据官方文档,首先得知道 lazyLoad方法中的参数node, resolve分别是什么

  2. 配置自己的接口请求,我的是地区数据(省市区四级联动)

  3. 需要注意的是 props需要在data()里赋值,所以数据请求也要放进去

  4. 获取到数据后,需要按照它的规范赋值 => value:值,label:文字,leaf:层级

  5. 如果是三级,那么leaf值是=> 0, 1, 2,以此类推。我的是四级,所以是 => node.level >= 3

  6. 尽量不要用hover(效果会一闪一闪的,用户体验不好,click最佳)

已封装成组件,附上全部代码,供君使用:

<el-cascader

size=“mini”

:props=“props”

@change=“handleChange”

v-model=“value”

style=“width: 300px”

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-cascader是一个基于Element UI的级联选择器组件,支持多选和多级联。要实现多选和多级联数据回显,可以按照以下步骤进行: 1.在模板中使用el-cascader组件,并设置v-model为一个数组,用于存储选中的值。 2.在组件中设置options属性为一个数组,用于存储级联选择器的选项数据。 3.在组件中设置props属性为一个对象,用于自定义选项的属性,例如value用于指定选项的值,label用于指定选项的显示文本。 4.在组件中设置@change事件,用于在选项发生变化时更新选中的值。 5.在组件中设置@expand-change事件,用于在级联选择器展开时动态加载选项数据。 6.在组件中设置cascaderData属性为一个数组,用于存储级联选择器的选项数据。 7.在组件中设置censusLandChange方法,用于在级联选择器展开时动态加载选项数据。 以下是一个el-cascader多选多级联数据回显的示例代码: ```html <template> <el-cascader v-model="selectedOptions" :options="cascaderData" :props="{ value: 'id', label: 'name' }" @change="handleChange" @expand-change="censusLandChange" placeholder="请选择省市区" style="width: 270px; padding-left: 7px;" multiple ></el-cascader> </template> <script> export default { data() { return { selectedOptions: [], cascaderData: [] }; }, mounted() { // 初始化选项数据 this.cascaderData = [ { id: 1, name: "北京市", children: [ { id: 11, name: "东城区", children: [ { id: 111, name: "东华门街道" }, { id: 112, name: "景山街道" } ] }, { id: 12, name: "西城区", children: [ { id: 121, name: "新街口街道" }, { id: 122, name: "西长安街街道" } ] } ] }, { id: 2, name: "上海市", children: [ { id: 21, name: "黄浦区", children: [ { id: 211, name: "外滩街道" }, { id: 212, name: "南京东路街道" } ] }, { id: 22, name: "徐汇区", children: [ { id: 221, name: "徐家汇街道" }, { id: 222, name: "漕河泾街道" } ] } ] } ]; }, methods: { handleChange(value) { // 更新选中的值 this.selectedOptions = value; }, censusLandChange(value, selectedData) { // 动态加载选项数据 const targetOption = selectedData[selectedData.length - 1]; targetOption.loading = true; setTimeout(() => { targetOption.children = [ { id: `${targetOption.id}1`, name: `${targetOption.name}1` }, { id: `${targetOption.id}2`, name: `${targetOption.name}2` } ]; targetOption.loading = false; }, 1000); } } }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值