最近在做项目的时候用到了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中

element-ui casader组件动态加载的回显问题的更多相关文章

  1. EasyUI的treegrid组件动态加载数据问题的解决办法

    http://www.jquerycn.cn/a_3455 —————————————————————————————————————————————————————————————————————— ...

  2. React 性能优化之组件动态加载(react-loadable)

    React 项目打包时,如果不进行异步组件的处理,那么所有页面所需要的 js 都在同一文件中(bundle.js),整个js文件很大,从而导致首屏加载时间过长. 所有,可以对组件进行异步加载处理,通常 ...

  3. 如何按需动态加载js文件

    JavaScript无非就是script标签引入页面,但当项目越来越大的时候,单页面引入N个js显然不行,合并为单个文件减少了请求数,但请求的文件体积却很大.这时候最好的做法就是按需引入,动态引入组件 ...

  4. Ext JS学习第十天 Ext基础之动态加载JS文件(补充)

    此文用来记录学习笔记: •Ext4.x版本提供的一大亮点就是Ext.Loader这个类的动态加载机制!只要遵循路径规范,即可动态加载js文件,方便把自己扩展组件动态加载进来,并且减轻浏览器的压力. • ...

  5. Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单

    动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的. 我们在这里就用上一篇准备好的数据格式Mock出模拟数据,然后动态生成我们的导航菜单. 接口 ...

  6. Vue + Element UI 实现权限管理系统(动态加载菜单)

    动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的. 我们在这里就用上一篇准备好的数据格式Mock出模拟数据,然后动态生成我们的导航菜单. 接口 ...

  7. Element UI:级联选择器Cascader_动态加载_多级请求不同接口(已知第一级调取第二级)

    ELEMENT UI_CASCADER 使用过饿了么级联动态加载的小伙伴应该都知道,lazyLoad本身是一个无差别返回渲染结点的函数. 当我们存在一个需求:已知级联选择器的第一级结点,现在需要通过第 ...

  8. NGUI学习笔记(四):动态加载UI和NGUI事件

    动态加载UI 我们进入一个场景后,如果将这个场景所有可能用到的UI都直接放在场景中做好,由于要在进入场景时就部署好所有的UI对象,那么当UI对象较多时会碰到的问题是:1.初始化场景会产生非常明显的卡顿 ...

  9. QUiLoader 动态加载.ui文件

    动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui 文件.不用 uic工具把.ui 文件变成等价的 c++代码,而是在程序运行过程中需要用到UI文件时,用 QUiLoader ...

  10. 详解QUiLoader 动态加载.ui文件

    http://blog.chinaunix.net/uid-13838881-id-3652523.html 1.适用情况: 动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui ...

随机推荐

  1. web基础(4): CSS布局与定位

    chapter 5 CSS 布局与定位 web 前端开发的时候不是马上就考虑字体 字号这些细节,而是要先定下布局,也就是页面结构.    右图中一个个栏目就像是"盒子",每个盒子的 ...

  2. JAVA查漏补缺 2

    JAVA查漏补缺 2 目录 JAVA查漏补缺 2 面向对象编程 定义类的注意事项 两个变量指向同一个对象内存图 垃圾回收机制 面向对象编程 面向:找.拿 对象:东西 面向对象编程:找或拿东西过来编程 ...

  3. 20203412马畅若 实验三 《Python程序设计》Socket编程技术实验报告

    实验三 Socket编程技术 课程:<Python程序设计>班级: 2034姓名: 马畅若学号:20203412实验教师:王志强实验日期:2020年5月30日必修/选修: 公选课 ##1. ...

  4. Spark 中三种数据处理对象的区别: RDD-Dataset-Dataframe

    1,对比表:   RDD Dataframe Dataset 版本 1.0 1.3 1.6 描述 分布式数据集合 行列化的分布式数据集合  RDD 和 DataFrame的结合 数据格式 结构化和非结 ...

  5. uni-app学习笔记之----目录认识

    新建了一个项目之后,先简单认识目录结构 1.pages  存放项目的所有页面 2.static  存放静态资源 3.unpackage  存放项目打包之后生成的文件 4.App.vue   项目的根组 ...

  6. JSR 133

      JSR 133是Java语言规范的一个JSR(Java Specification Request),全称为Java Memory Model and Thread Specification R ...

  7. Charles抓包工具详解

    学习Charles能做什么: 能够用charles分析前后端问题 能够使用charles模拟弱网测试环境 能够使用charles断点构建异常的测试环境 Charles 简介 1.Charles是什么? ...

  8. Vim与系统剪贴板的复制粘贴

    上次在VirtualBox 安装Ubuntu 的时候有用到 vi/vim 与系统剪贴板的复制粘贴 通用问题,因此记录一下. 开始前需要先查看vim 是否已经支持clipboard功能,使用vim -- ...

  9. github 设置代理

    1. 直接修改 .git/config 文件 注意: 仅对当前仓库有效, 推荐这种, 因为不是所有的仓库都需要走代理 [http "https://github.com"] pro ...

  10. python33

    Python逻辑运算符 Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20: 运算符 逻辑表达式 描述 实例 and x and y 布尔"与" - 如果 x ...