element-ui 动态级联选择器Cascader

这篇博客讲述了在Vue项目中使用Element UI的级联组件时遇到的数据量过大问题。作者尝试将原本一次性加载所有数据的方式改为动态加载,但在实现过程中遇到了`this`指向错误,导致数据无法正确传递。通过调整函数的定义方式,解决了`this`指向问题,实现了动态加载。博客总结了在官方示例基础上进行修改时如何正确访问组件外部的数据成员。
摘要由CSDN通过智能技术生成

这两天工作需要做一个级联,原本想使用 element-ui 普通级联,后端直接把数据封装好返回就行了,可是发现数据量太大了就想改成动态加载的。然后问题出现了。

依官方例子修改(错误示例)

<el-cascader :props="props"></el-cascader>

<script>
import HttpJson from "../../../utils/requestJson.js"

  export default {
    data() {
      unit:"",
      return {
        props: {
          lazy: true,
          lazyLoad (node, resolve) {
            let data;
			if(node.level == 0){
			  data = {
			    deptno:node.value,
			  };
			}else{
			  data = {
			    deptno:this.unit,//此处报错(原因this指向的是 props 这个对象)
			  };
			}
			HttpJson.post("/userDept/listDept",data).then(res=>{
				  resolve(res.data.result);
			})
        }
      };
    }
  };
</script>

依官方例子修改(正确写法)

<el-cascader :props="props"></el-cascader>

<script>
import HttpJson from "../../../utils/requestJson.js"

  export default {
    data() {
      unit:"",
      return {
        props:{
		  label: "orgName",
	      value: "orgCode",
		  lazy: true,
		  lazyLoad:((node,resolve)=>{
			let data;
			if(node.level == 0){
			  data = {
			    deptno:node.value,
			  };
			}else{
			  data = {
			    deptno:this.unit,//此处this指向是VUE这个实例)
			  };
			}
			
			HttpJson.post("/userDept/listDept",data).then(res=>{
			  resolve(res.data.result);
			})
		  }
       };
    }
  };

总结

官方给的例子也没有问题,问题在于如果想依照官方文档上的写法获取data中声明的参数就较为困难,所以需要使用第二种方式改变this指向即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值