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

相关推荐
CappuccinoRose4 小时前
JavaScript 学习文档(二)
前端·javascript·学习·数据类型·运算符·箭头函数·变量声明
这儿有一堆花4 小时前
Vue 是什么:一套为「真实业务」而生的前端框架
前端·vue.js·前端框架
全栈前端老曹5 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
NCDS程序员5 小时前
v-model: /v-model/ :(v-bind)三者核心区别
前端·javascript·vue.js
夏幻灵5 小时前
CSS三大特性:层叠、继承与优先级解析
前端·css
小杨同学呀呀呀呀6 小时前
Ant Design Vue <a-timeline>时间轴组件失效解决方案
前端·javascript·vue.js·typescript·anti-design-vue
华玥作者14 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
Mr Xu_14 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠14 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
lang2015092814 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet