Проблема сброса формы загрузки Vuetify v-file

#vue.js #vuetify.js

#vue.js #vuetify.js

Вопрос:

Я использую это внутри v-формы, которая находится внутри v-диалога:

 
    <v-file-input
        v-model="referencefile"
        clearable
        show-size
        label="Attach Reference Letter"
        @change="uploadref"
    >
    </v-file-input>

 

uploadref() выполняет загрузку в firebase, и после этого загрузка работает нормально
Я отправляю форму, она работает без ошибок, но когда я пытаюсь сбросить форму с помощью:

 
    this.$refs.form.reset();

 

Я получаю эту ошибку в консоли:

 
    vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'name' of undefined"
    
    found in
    
    ---> <VFileInput>
           <VForm>
             <VCard>
               <VThemeProvider>
                 <VDialog>
                   <Userform>
                     <VToolbar>
                       <VSimpleTable>
                         <VData>
                           <VDataTable>
                             <Adminview> at src/views/Adminview.vue
                               <VContent>
                                 <VApp>
                                   <App> at src/App.vue
                                     <Root>
    warn @ vue.runtime.esm.js?2b0e:619
    logError @ vue.runtime.esm.js?2b0e:1884
    globalHandleError @ vue.runtime.esm.js?2b0e:1879
    handleError @ vue.runtime.esm.js?2b0e:1839
    invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1862
    invoker @ vue.runtime.esm.js?2b0e:2175
    invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854
    Vue.$emit @ vue.runtime.esm.js?2b0e:3888
    set @ VFileInput.ts?e8de:108
    reset @ index.ts?91bf:220
    eval @ VForm.ts?24e7:89
    reset @ VForm.ts?24e7:89
    close @ Userform.vue?6370:412
    eval @ Userform.vue?6370:440
    Promise.then (async)
    submit @ Userform.vue?6370:437
    invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854
    invoker @ vue.runtime.esm.js?2b0e:2179
    invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854
    Vue.$emit @ vue.runtime.esm.js?2b0e:3888
    click @ VBtn.ts?0eff:156
    invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854
    invoker @ vue.runtime.esm.js?2b0e:2179
    original._wrapper @ vue.runtime.esm.js?2b0e:6917
    vue.runtime.esm.js?2b0e:1888 TypeError: Cannot read property 'name' of undefined
        at VueComponent.uploadref (Userform.vue?6370:361)
        at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
        at VueComponent.invoker (vue.runtime.esm.js?2b0e:2175)
        at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
        at VueComponent.Vue.$emit (vue.runtime.esm.js?2b0e:3888)
        at VueComponent.set [as internalValue] (VFileInput.ts?e8de:108)
        at VueComponent.reset (index.ts?91bf:220)
        at eval (VForm.ts?24e7:89)
        at Array.forEach (<anonymous>)
        at VueComponent.reset (VForm.ts?24e7:89)

 

Я также получаю ту же ошибку, если пытаюсь очистить загрузку файла и выбрать новый файл без отправки формы.

Ответ №1:

Я нашел решение, которое, похоже, работает в этом случае. Проблема, по-видимому, заключается в том, что при очистке формы она снова активирует событие onChange в v-file-input. Поскольку ввод очищается при сбросе формы, данные становятся неопределенными и при отправке в функцию загрузки вызывают ошибку.

Я добавил проверку, чтобы увидеть, был ли файл данных (referencefile) неопределенным перед выполнением функции загрузки.

 if (this.referencefile !== undefined){
  // execute the upload
}