您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何解決vue項(xiàng)目中type=”file“ change事件只執(zhí)行一次的問題,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
問題描述
在最近的項(xiàng)目開發(fā)中遇到了這樣的一個(gè)問題,當(dāng)我上傳了一個(gè)文件時(shí),我將獲取到的文件名清空后,卻無法再次上傳相同的文件
<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>
因?yàn)槲抑皇菍ata中的屬性值清空而已,文件名沒有變當(dāng)然會(huì)不出發(fā)change事件
解決辦法
目前網(wǎng)上有好多解決辦法,但基本上都無法在vue上使用,于是我想到了v-if
v-if 是“真正”的條件渲染,因?yàn)樗鼤?huì)確保在切換過程中條件塊內(nèi)的事件監(jiān)聽器和子組件適當(dāng)?shù)乇讳N毀和重建。
于是在代碼中加入了一個(gè)小的開關(guān),喚起change事件時(shí)就將他銷毀
事件結(jié)束時(shí)再將它重建,這樣問題就輕松的解決了
<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>
關(guān)于“如何解決vue項(xiàng)目中type=”file“ change事件只執(zhí)行一次的問題”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。