我正在尝试使用 vue 组合 api 上传。虽然上传工作正常,但我想在单击重置按钮时重置,但无法在合成 api 中访问 $refs.file 或 this.$refs.file 。
<template>
<input type="file" class="absolute w-0 h-0 invisible opacity-0" @change="handleImageSelected" ref="file" accept="image/*">
<button @click="$refs.file.click()">Upload</button>
<button @click="resetUploadFile">Reset</button>
</template>
<script setup>
import {ref} from 'vue'
const imageFile = ref()
const imageUrl = ref()
function handleImageSelected(e) {
if (!e.target.files.length) return;
imageFile.value = e.target.files[0];
console.log(e.target.files[0])
let reader = new FileReader();
reader.readAsDataURL(imageFile.value);
reader.onload = e => {
imageUrl.value = e.target.result;
};
}
function resetUploadFile() {
this.$refs.file.target.value = null
imageFile.value = null
imageUrl.value = null
}
</script> Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你必须做什么,最初你需要包含
getCurrentInstance组件,const instance = getCurrentInstance();然后您需要执行instance.refs.file.value = null总之,您的组件应如下所示。<template> <input type="file" class="absolute w-0 h-0 invisible opacity-0" @change="handleImageSelected" ref="file" accept="image/*"> <button @click="$refs.file.click()">Upload</button> <button @click="resetUploadFile">Reset</button> </template> <script setup> import {ref, getCurrentInstance} from 'vue' const instance = getCurrentInstance() const imageFile = ref() const imageUrl = ref() function handleImageSelected(e) { if (!e.target.files.length) return; imageFile.value = e.target.files[0]; console.log(e.target.files[0]) let reader = new FileReader(); reader.readAsDataURL(imageFile.value); reader.onload = e => { imageUrl.value = e.target.result; }; } function resetUploadFile() { instance.refs.file.value = null imageFile.value = null imageUrl.value = null } </script>