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

element el-cascader动态加载数据 (省市区三级联动)

选择效果图

选择完毕效果图

前端代码

  • v-model:选择保存的值
  • :props:配置项
  • clearable:可清除
 <el-form-item label="省市区" prop="addrIdPath">
   <el-cascader
      style="width: 340px;"
      v-model="form.addrIdPath"
      :props="address"
      clearable
      >
    </el-cascader>
  </el-form-item>

 data中数据配置,对应上方props

 // 省市区
  address: {
     lazy: true, // 开启懒加载
     checkStrictly: true, //可选择任意节点
     lazyLoad (node, resolve) { //node为当前点击的节点,resolve为数据加载完成的回调(必须调用)
       setTimeout(() => {
         const nodes = []; 
         // 构造查询条件
         let query = {
           id: node.level == 0 ? 0:node.value,
           level:node.level + 1
         }
         //查询接口
         getTree(query).then(res=>{
           res.data.map((item)=>{
             let obj = {
               value: item.value,
               label: item.label,
               //leaf: item.hasChildren // 节点级别,如果没有子节点就停止查询
             }
             nodes.push(obj);
           })
           //重新加载节点
           resolve(nodes);
         })
       }, 500);
     }
   }

组件数据回填

  • 配置 options 属性
  • options 中存放数据
  • this.$refs.cascader.panel.initStore() 初始化组件
 <el-form-item label="省市区" prop="addrIdPath">
   <el-cascader
      style="width: 340px;"
      v-model="form.addrIdPath"
      :props="address"
      :options="options"
      clearable
      >
    </el-cascader>
  </el-form-item>

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值