這次帶給大家vue專案中type=」file「change事件只執行一次怎樣處理,處理vue專案中type=」file「 change事件只執行一次的注意事項有哪些,以下是實戰案例,一起來看一下。
問題描述
在最近的專案開發中遇到了這樣的一個問題,當我上傳了一個檔案時,我將取得的檔案名稱清空後,卻無法再上傳相同的檔案
<template> <p class="hello"> <input type="button" value="上传文件" name="" id="" @click="updata"> <input type="file" style="display:none" @change="getFile" id="input-file"> <p v-if="fileName"> <p>上传的文件名:{{fileName}}</p> <button @click="delFile">清空文件</button> </p> </p> </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> <p class="hello"> <input type="button" value="上传文件" name="" id="" @click="updata"> <input v-if="ishowFile" type="file" style="display:none" @change="getFile" id="input-file"> <p v-if="fileName"> <p>上传的文件名:{{fileName}}</p> <button @click="delFile">清空文件</button> </p> </p> </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>
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
怎麼使用基於Vue2x實現響應式自適應輪播元件外掛程式VueSliderShow功能_vue.js
以上是vue專案中type=”file' change事件只執行一次怎麼處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!