van-uploader组件动态设置capture属性不生效问题

最近在使用van-uploader做一个上传图片的功能的时候,因为需求需要让用户可以选择相机还是相册上传。就是点击上传按钮时弹出以下这种弹窗。

html 复制代码
<van-popup
  position="bottom"
  :style="{ height: '150px' }"
  v-model="showSelect"
>
  <div class="buttom-pop">
    <div class="select">
      <p @click="chooseFile('camera')">Camera</p>
      <p @click="chooseFile(false)">Album</p>
    </div>
  </div>
</van-popup>

使用时点击上传的图片,会弹出上面的popup。

ruby 复制代码
<van-uploader ref="uploaderRef" v-model="fileList" :after-read="afterRead" :capture="capture">
    <div class="upload-icon" @click="showSelect = true" >
    </div>
</van-uploader>

点击popup中的选项时,去切换capture。

typescript 复制代码
chooseFile(type) {

      this.capture = type; // 设置上传方式

      console.log('选择上传方式', type)

      this.showSelect = false; // 关闭选择上传方式弹框

      // 这里使用 $nextTick 确保 DOM 更新后再调用 chooseFile 方法

      // 这是因为capture属性的设置需要在 DOM 更新后才能被真正设置,使用chooseFile方法时对应的capture属性才会生效

      this.$nextTick(() => {

        this.$refs.uploaderRef.chooseFile(); // 调用van-uploader的chooseFile方法

      });

    }

初始加载时,capture设置为''。然后就发现一个问题,就是不管怎么改capture,实际上会一直是相机。但是如果不动态配置capture,则可以唤起相册。

后来研究了一下,发现具体原因是在修改capture时,没有等到dom完全更新就调用chooseFile了。 所以这里加一下$nextTick后去调用chooseFile就可以了。

究其原因,还是因为更新视图时,是异步的,直接调用van-uploader组件中的chooseFile时,capture的值并没有被更新就调用了。所以浏览器识别就会一直是相机。

相关推荐
WYiQIU43 分钟前
11月面了7.8家前端岗,兄弟们12月我先躺为敬...
前端·vue.js·react.js·面试·前端框架·飞书
谢尔登1 小时前
简单聊聊webpack摇树的原理
运维·前端·webpack
娃哈哈哈哈呀1 小时前
formData 传参 如何传数组
前端·javascript·vue.js
zhu_zhu_xia2 小时前
vue3+vite打包出现内存溢出问题
前端·vue
tsumikistep2 小时前
【前后端】接口文档与导入
前端·后端·python·硬件架构
行走的陀螺仪3 小时前
.vscode 文件夹配置详解
前端·ide·vscode·编辑器·开发实践
2503_928411563 小时前
11.24 Vue-组件2
前端·javascript·vue.js
Bigger4 小时前
🎨 用一次就爱上的图标定制体验:CustomIcons 实战
前端·react.js·icon
谢尔登4 小时前
原来Webpack在大厂中这样进行性能优化!
前端·webpack·性能优化
cypking5 小时前
Vue 3 + Vite + Router + Pinia + Element Plus + Monorepo + qiankun 构建企业级中后台前端框架
前端·javascript·vue.js