牵扯三方:v-if/v-show、el-form、label-width: auto/ 数值px
最近,刚做完的页面拿去测试,结果一下子出现六个bug。。。
还好是同一个bug所测出的同一类问题,但是则测试眼里那就是6个bug
引入elementUI中的form表单:
<div v-show="type === 1">
<el-form
ref="form"
:rules="rules"
label-width="150px"
return {
// 表单规则
rules: {
noteName: [{
required: true,
message: '请输入正确的姓名',
trigger: ['change', 'select']
}]
}
}
}
当用户在输入框中输入的值,超出输入框的宽度 label-width="150px",那么表单的内容就会往下掉,于是改为将固定值改为
label-width="auto",让内容自适应。
这时,控制台就会出现一个错误,虽然对使用没有影响,但是一看红色就给人感觉是出错了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kA2IWlS0-1658911486030)(C:\Users\zy3\AppData\Roaming\Typora\typora-user-images\image-20220727140926072.png)]
后面解决方法是 将 v-show="type === 1" 修改为 v-if="type === 1"
然后就影响到表单验证了。。。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwpf9mCn-1658911486034)(C:\Users\zy3\AppData\Roaming\Typora\typora-user-images\image-20220727141855242.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6nCPCgI-1658911486037)(C:\Users\zy3\AppData\Roaming\Typora\typora-user-images\image-20220727161304217.png)]
其他bug显示,跟这些类似,表单验证不能正常使用
mounted 完成的。而v-if用来切换的元素是会被销毁的,导致了v-if内的表单项,由于在 mounted 时期没有进行渲染,所以规则也没有绑定上,因此初始化时不符合显示条件的不会生成规则,导致后面切换条件,显示的输入框的校验也不会生效/消失。一个是无法正常使用,一个是隐藏了也会校验,多耗点性能
v-if改回v-show<div v-if="type === 1">
<el-form
ref="form"
:rules="rules"
key="title"
label-width="150px"
>
<el-form-item prop="noteName">
<el-input>el-input>
el-form-item>
el-form>
div>
原理:在v-if切换标签时,多个相同的标签会被渲染,如果不添加key来区分则会出现复用的情况。同理:v-for渲染的标签也要加key来区分。而原本这些标签每一个都是独立的,所以需要添加key来区分。
注意事项:
label-width = "auto" 与 v-if,同时使用时,会有冲突