Как узнать, не является ли файловый ввод пустым с помощью Vue

#vue.js #vuejs2

#vue.js #vuejs2

Вопрос:

Привет, я пытаюсь проверить, не является ли файловый ввод пустым, поэтому я делаю это:

Мой HTML-код:

 <input accept="image/jpeg, image/png, image/gif" type="file" class="form-control" v-on:change="onFileChange">
  

Я выполняю проверку с помощью кнопки:

 <button 
     :disabled="I need to know what it'll be here ? !isDisabled : isDisabled"
     type="submit"
     class="btn btn-success btn-icon-split">
      <span class="icon text-white-50">
         <i class="fas fa-check"></i>
      </span>
     <span class="text">Guardar</span>
</button>
  

Но я не знаю, как это сделать, потому что у него нет v-model, и я не знаю, как проверить, пусто ли оно. Как я мог это сделать?

Спасибо

Ответ №1:

 <div id="app">
    <input type="file" @change="fileChange">
    <button :disabled="noFiles">Submit</button>
</div>
  

С помощью Composition API

 const { createApp, ref } = Vue;

createApp({
    setup() {
        const noFiles = ref(true);
        const fileChange = (e) => noFiles.value = !e.target.files.length;

        return { noFiles, fileChange };
    },
}).mount('#app');
  

Без Composition API

 new Vue({
    el: '#app',
    
    data: () => ({
        noFiles: true,
    }),

    methods: {
        fileChange(event) {
            this.noFiles = !event.target.files.length;
        }
    }
});
  

Ответ №2:

Вам нужно что-то вроде этого:

 data(){
   return{
      file: null,
   }
}

methods: {
   onFileChange(){
      this.file = event.target.files[0];
   }, 
}
  

и проверьте метод отправки кнопки:

 if(this.file !== null){
   //some code
}
  

Ответ №3:

Добавьте a ref к входному файлу, затем внутри обработчика отправки проверьте this.$refs.file.files длину :

  <input accept="image/jpeg, image/png, image/gif" ref="file"
    type="file" class="form-control" v-on:change="onFileChange">
  
   save(){
      console.log(this.$refs.file.files.length)
    }
  

ЖИВОЙ ПРИМЕР

Комментарии:

1. Привет, но когда я использую это, он говорит [Vue warn]: Ошибка при рендеринге: «TypeError: не удается прочитать свойство ‘files’ неопределенного»:/ что это может быть? Я добавил ref=»file» и добавил this this.$refs.file . Файлы. длина до кнопки отправки: отключена

2. используете ли вы composition api?

3. я имею setup в виду, как в ответе @MattDeacalion

4. Нет, я не использую setup, я просто делаю это в методе onFileChange(e){ console.log(e.target. файлы [0]); это. file = e.target . files[0]; }, моя вещь в том, как я могу добавить проверку, отключенную в кнопке

5. Я сделал то, что вы указали, но он говорит, что он не определен