当前位置:网站首页>解决cascader日常报错问题
解决cascader日常报错问题
2022-07-19 17:56:00 【zx_20220104】
项目中使用到了element-ui中的cascader级联选择器,组件下拉列表是动态的,根据用户选择的类型来从后台请求数据
<el-select v-model="type" @change="getCascader" placeholder="请选择类型">
<el-option
v-for="item in type"
:key="item.typeValue"
:label="item.typeName"
:value="item.typeValue"
/>
</el-select>
<el-cascader
:options="cascaderOption"
:props="props"
v-model="cascaderValue"
collapse-tags
:placeholder="请先选择类型"
/>
再根据后台获取的数据,加载级联选择器
getCascader() {
this.cascaderValue= []
getCascader(this.type).then(response => {
this.cascaderOption = response.data.data
});
}
于是就出现bug了
一、options为空的情况
场景:有的类型没有数据,这时cascader的options是[ ],下拉框是空的。如果选择了一个类型,根据类型获取了cascader的数据,在cascader中选择了一条数据,再更换类型,没有这条数据了就会报错
[Vue warn]: Error in callback for watcher "options": "TypeError: Cannot read property 'level' of null
TypeError: Cannot read property 'level' of null
根据报错信息点进去看了一下,发现cascader有选中项的绑定值checkedValue和点击的父节点(高亮)activePath , 即便设置了this.cascaderValue= [] ,cascader中的activePath还是有值,也就是点击的父节点会被记录下来,再次加载cascader找不到就会报错。
解决:如果没有数据就将cascader设置为不可编辑
<el-cascader
:options="cascaderOption"
:props="props"
:disabled="optionsChanged"
v-model="cascaderValue"
collapse-tags
:placeholder="showPlaceholder"
/>
并且直接return,不加载下拉节点
getCascader() {
this.cascaderValue= []
getCascader(this.type).then(response => {
if(response.data.data.length === 0){
this.optionsChanged = true
this.showPlaceholder = '暂无范围'
return
}
this.cascaderOption = response.data.data
});
}
二、编辑时给cascader赋值
场景:cascader下拉节点的数据由后台提供,编辑时的显示值依然让后台提供,将后台返回的信息直接赋值给cascaderthis.type = row.type //row为后台返回的数据。这样赋值是可以显示的,但是改变类型后,cascader的options又动态改变,这就导致了cascader的value在下拉节点中不存在,又跟一options为空的情况报了同样的错误
[Vue warn]: Error in callback for watcher "options": "TypeError: Cannot read property 'level' of null
TypeError: Cannot read property 'level' of null
刚开始以为是后台返回的数据有问题,将后台返回的数组直接写死赋值给cascader就不会报错,只要数据写死就不会报错,动态赋值就报错。
this.type = ['1','2']
真让人摸不着头脑。
解决:叫上后台一起排查后发现将返回的options中的value从string改成了int就可以了
三、点击了父节点后改变了cascader的options
场景:后面又发现了一个bug,就是点击了父节点但是并没有选中的时候,改变了类型,options也动态改变了,改变后没有这个父节点就会报错。当然,选中了节点同样会报错,只要有activePath 就会报错。
[Vue warn]: Error in callback for watcher "options": "TypeError: Cannot read property 'level' of null
TypeError: Cannot read property 'level' of null
解决:与一options为空的bug类似,重新渲染cascader都可以解决。
改变类型,cascader的options改变后,将cascader重新渲染。重新渲染组件的方法有两种:
1、给cascader设置v-if,改变类型后,赋值options前将v-if设置为true就可以重新渲染cascader,但是这样有个缺陷就是不流畅,v-if设置为false时cascader的位置会空白,影响用户体验。
2、给cascader设置一个key,改变类型时也改变key值,key值改变了,cascader就会重新渲染
<el-cascader
:key="isResouceShow"
:options="cascaderOption"
:props="props"
:disabled="optionsChanged"
v-model="cascaderValue"
collapse-tags
:placeholder="showPlaceholder"
/>
getCascader() {
this.cascaderValue= []
++this.isResouceShow
this.showPlaceholder = '请先选择所属范围'
getCascader(this.type).then(response => {
if(response.data.data.length === 0){
this.optionsChanged = true
this.showPlaceholder = '暂无范围'
return
}
this.cascaderOption = response.data.data
});
}
边栏推荐
- Interlocked原子访问系列函数
- 启牛开通的华泰账户用着安全吗?
- Base64 (字符串与Base64字符串相互转换)
- 载他克莫司的HSA蛋白纳米粒/DCT-BSA多西紫杉醇白蛋白纳米粒/血清白蛋白-透明质酸纳米颗粒的制备
- 50个名额限量开放|带着OceanBase年度发布会的消息走来了!
- 教程:Cloud中的加密密钥(使用 Golang 和 CLI)
- Synchronization scripts between XSync servers
- Is it safe for Shenwan Hongyuan securities to open an account? Can I buy stocks after opening an account
- 气泡水位计的工作原理及注意事项
- ES6函数参数默认值,以及rest参数
猜你喜欢
ES6中的箭头函数
狂神redis笔记03
Template string in ES6, simplifying object writing
Wechat applet development uses onreachbottom to realize page bottom loading and paging
【软件测试】—— 微信发红包测试用例
RoI Pooling 和 ROI align
Welcome to ICASSP 2022 - Greetings from Magic Data
使用 Abp.Zero 搭建第三方登录模块(四):微信小程序开发
DTX-GA-BSA NPs 载多西他赛和藤黄酸白蛋白纳米粒/硫鸟嘌呤白蛋白纳米粒
MySQL common statement knowledge points
随机推荐
R语言游程检验:使用runs.test函数对二值序列数据执行游程检验(检验序列是否是随机的)
P7914 [CSP-S 2021] 括号序列 题解
web数字可视化有哪些实现的方法?
DML在图形界面化工具的使用
What do nohup and xargs mean
RES-BSANP白藜芦醇白蛋白纳米粒/包裹紫杉烷类的白蛋白纳米颗粒载体
Mysql常用语句知识点
Structure assignment in ES6
通过屏幕交互绘制贝塞尔曲线
UART bus protocol
R语言获取data.table数据中指定数据列的第N个最大值所在的数据行
【TypeScript 之手册】
C language structure
[cloud co creation] design Huawei cloud storage architecture with the youngest cloud service hcie (Part 2)
mfc inifile unicode mode读取方法
R语言使用rowMedians函数计算dataframe中的所有数据行的行数据中位数值
Who else can't answer the three MQ interview questions that an interviewer must ask??
Preparation of tacrolimus loaded HSA protein nanoparticles / dct-bsa docetaxel albumin nanoparticles / serum albumin hyaluronic acid nanoparticles
性能工具 -- jmeter 环境准备
I met me | virtual digital human cultivation, facegood virtual digital human open source technology seminar