最近在做h5项目时,遇到了一个非常奇怪的问题,某个页面用vant的picker组件有时内容会消失,有时按钮会消失,而且这种情况只在安卓手机上出现,苹果手机和pc端均没有这个问题。
这个现象让我一度怀疑是不是组件适配性不好,不兼容。但是我又发现了项目中还有一个页面也用到了picker组件,但那个页面表现的非常好,一点问题没有。既然有没有问题的情况,那肯定是出问题的那个页面代码写的有问题啦,于是开始改代码。
尝试1:
自己写了toolbar 和option的插槽,没什么作用,但是有一个发现,按钮和内容不是没有,是没有渲染出来。
尝试2:
仔细看代码(别人写的,我接手),发现赋值的时候又一步操作很迷,是多余的,删掉了,当时立下很有效果,一度以为解决了问题,但项目修改部署了几版以后,又出现这个问题了…囧
尝试3:
实在不知道该如何解决,遂请教了师傅,师傅一看代码弹出层竟写到了循环里???痛批我一顿,把弹出层移出后问题果然解决了,牛
总结:出现问题的原因可能是弹出层写到了循环内部,可能出现多个弹出层重叠,至于还有选择的功能,可能是滚动穿透。
最后:路漫漫其修远兮,壮士还得再努力。
修改之后:
<!-- 循环出来的数据 -->
<template :key="index" v-for="(other, index) in listOther">
<div class="btn-inline">
<van-field
v-if="other.type === 0"
v-model="other['value']"
<!-- 中间内容不展示了 -->
</template>
<van-popup v-model:show="showPicker" position="bottom">
<van-picker ref="picker" :columns="columns.data" @confirm="onConfirm" @cancel="showPicker = false" />
</van-popup>
总结的根本原因可能不是很准确,如有大佬路过,还请执教一番。