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的值并没有被更新就调用了。所以浏览器识别就会一直是相机。

相关推荐
Laravel技术社区17 小时前
用PHP8实现斗地主游戏,实现三带一,三带二,四带二,顺子,王炸功能(第二集)
前端·游戏·php
m0_7381207218 小时前
应急响应——知攻善防Web-3靶机详细教程
服务器·前端·网络·安全·web安全·php
程序员爱钓鱼1 天前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder1 天前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL1 天前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码1 天前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_1 天前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy1 天前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌1 天前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构