您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何解決vue項目中type=”file“ change事件只執行一次的問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
問題描述
在最近的項目開發中遇到了這樣的一個問題,當我上傳了一個文件時,我將獲取到的文件名清空后,卻無法再次上傳相同的文件
<template> <div class="hello"> <input type="button" value="上傳文件" name="" id="" @click="updata"> <input type="file" @change="getFile" id="input-file"> <div v-if="fileName"> <p>上傳的文件名:{{fileName}}</p> <button @click="delFile">清空文件</button> </div> </div> </template> <script> import $ from 'n-zepto' export default { name: 'HelloWorld', data () { return { fileName: '' } }, methods:{ updata(){ // 喚起change事件 $('#input-file').click() }, getFile(e){ // change事件 this.doSomething() }, doSomething(){ // do something this.fileName = e.target.files[0].name }, delFile(){ this.fileName='' } } } </script>
因為我只是將data中的屬性值清空而已,文件名沒有變當然會不出發change事件
解決辦法
目前網上有好多解決辦法,但基本上都無法在vue上使用,于是我想到了v-if
v-if 是“真正”的條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建。
于是在代碼中加入了一個小的開關,喚起change事件時就將他銷毀
事件結束時再將它重建,這樣問題就輕松的解決了
<template> <div class="hello"> <input type="button" value="上傳文件" name="" id="" @click="updata"> <input v-if="ishowFile" type="file" @change="getFile" id="input-file"> <div v-if="fileName"> <p>上傳的文件名:{{fileName}}</p> <button @click="delFile">清空文件</button> </div> </div> </template> <script> import $ from 'n-zepto' export default { name: 'HelloWorld', data () { return { fileName: '', ishowFile: true, } }, methods:{ updata(){ // 喚起change事件 $('#input-file').click() this.ishowFile = false // 銷毀 }, getFile(e){ // change事件 this.doSomething() this.ishowFile = false // 重建 }, doSomething(){ // do something this.fileName = e.target.files[0].name }, delFile(){ this.fileName='' } } } </script>
關于“如何解決vue項目中type=”file“ change事件只執行一次的問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。