最近在做项目的时候用到了element-ui的cascader来做省市区的级联显示 我要做的需求就是在选择某个省的时候,再去加载省下面的所有市,在实现这个需求的过程中遇到了二级菜单不能反显的情况.以下是解决问题的方法,页欢迎各位大佬指正

首先简单介绍一下cascader的一些属性

value:对应省市的code值

label:对应省市的名字

leaf:是否是叶子节点,是叶子节点就不会继续加载下一面板,所以需要在请求市的时候添加

这里就是在请求第三个面板的时候,加了leaf:level>=2,当level>=2时为true,就说明这是最后一个cascader面板

  <el-cascader :props="props"></el-cascader>
<script>
let id = 0;
export default {
data() {
return {
props: {
lazy: true, //是否动态加载子节点,需与 lazyLoad 方法结合使用
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);
}
}
};
}
};
</script>

组件在初始化的时候就会执行lazyLoad,先加载所有的面板,所以数据的初始化要全部都放在lazyLoad里面,以下是代码

<el-cascader
:props = handleProps
v-model='address'
@change="handleChange"
separator="-"
></el-cascader> handleProps:{ //应该写在data里面的,我直接给拿出来了,初始化和鼠标点击的时候都会执行
lazy:true,
lazyLoad:(node,resolve)=>{ //在没有遇到leaf:true的时候就会一直执行
var provinceData
var cityData
if(!node.value){ // 初始化,没有点击省市的时候的赋值,数据的反显!!!
this.address = await this.$parent.handleArray() //从父组件传来的值
}
if(node.level==0){
this.$http('getProvince', params, 'post').then(res=>{
//只有在node.level为0的时候加载省数据,level是面板的排序,从0开始
if(res.code=="0000"){ //还有params我是直接省略了,不影响大家阅读的哈
provinceData =res.data.map(ele=>({
value:ele.code,
label:ele.name,
leaf:level>=1
}))
resolve(provinceData)
}
}).catch(err=>{
console.log(err,"====>获取省");
})
}
else if(node.level==1){
this.$http('getDict', params, 'post').then(res=>{
if(res.code=="0000"){
cityData =res.data.map(ele=>({
value:ele.code,
label:ele.name,
leaf:level>=1 //叶子节点,不会有下一层级了
}))
resolve(cityData)
this.cityObj[value] = this.cityData // 选择重复的选项,叶子节点不会再去请求,此时的cityData是一个[],因此可以将请求过的数据保存下来,
}
}).catch(err=>{
console.log(err,'获取市'); })
}
}
}

但是这个方法只能是在初始化的时候,进行数据的返显,当我改变用户的时候,省市没有发生变化,lazyload只能执行一次,所以借鉴了网上的方法,使用v-if进行组件的销毁与重建,迫使lazyload执行一次,注意这里的赋值和组件的显示放再定时器或者nextTick中

最新文章

  1. mybatis入门基础(二)----原始dao的开发和mapper代理开发
  2. 最新版CKEditor在线编辑器的配置方法
  3. oracle信息统计
  4. 弹出框优化实例(alert和confirm)
  5. js中获取URL中指定的查询字符串
  6. 58. N-Queens &amp;&amp; N-Queens II
  7. suricata学习笔记1--初步认识
  8. django admin 扩展
  9. SQL Server文本和图像函数
  10. poj 3274 Gold Balanced Lineup(哈希 )
  11. 20169210《Linux内核原理与分析》第六周作业
  12. 嵌套fragment时必须要重写 onDetach()
  13. POJ1664(简单动态规划)
  14. JSTL自定义标签库 (二)
  15. Swift开发
  16. Android系统之Broadcom GPS 移植
  17. Linux虚拟机部署单机solr报错500解决方法之一
  18. iOS CATransition 动画的简单使用
  19. 反射那些基础-Class
  20. c语言搜索子字符串

热门文章

  1. Docker部署Springboot+Vue项目
  2. 性能测试工具locust压测介绍
  3. 靶场练习1:Medium_Socialnetwork
  4. vue3项目在页面退出时弹窗确认--用vant组件Dialog弹窗在路由改变的时候不生效问题
  5. 反射的学习笔记--sql语句生成
  6. 小家大变局.PDF
  7. vue项目埋点实践,使用img发送埋点数据
  8. open-local部署和使用
  9. (0619) 电脑 传 ipad
  10. AUTOCAD——半径标注命令