Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser 'this.$refs' dans l'API de composition Vue 3 ?

J'essaie de télécharger en utilisant l'API de composition vue. Bien que le téléchargement fonctionne correctement, je souhaite réinitialiser lorsque vous cliquez sur le bouton de réinitialisation, mais il n'est pas accessible dans l'API de composition $refs.filethis.$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>

P粉420958692P粉420958692298 Il y a quelques jours441

répondre à tous(1)je répondrai

  • P粉762447363

    P粉7624473632023-12-27 14:27:58

    Ce que vous devez faire, vous devez d'abord inclure le composant getCurrentInstance, const instance = getCurrentInstance();然后您需要执行 instance.refs.file.value = null En résumé, votre composant devrait ressembler à ceci.

    <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>

    répondre
    0
  • Annulerrépondre