Я новичок в Vue, и я изучал, смотрел некоторые учебные пособия и руководства и пытался сделать форму автоматической загрузки для выбора файла, но это на самом деле полностью отличается от jquery, с jquery я обычно легко найти, когда Google, когда Googleдля Vue я не могу легко найти ответы и много руководств.
То, что у меня есть сейчас, я просто написал .vue-код, основанный на нескольких руководствах, которые я наблюдал.Я использую Vue на фреймворке Laravel.Я хочу, чтобы форма ввода автоматически отправляла и загружала файл при выборе.И мне удалось заставить это работать, вот код:
<template>
<div class="vcontainer">
<label class="btn btn-default btn-file float-left">
<span v-if="file">Change</span>
<span v-else>Choose file</span>
<input type="file" id="file" ref="file" v-on:change="handleFile()">
</label>
<div v-if="file">
<input type="hidden" :name="input_name" :value="file.id"/>
<span>{{ file.name }}</span> << This output name of file
<span>{{ file.id }}</span> << This WONT output file id
</div>
<div v-else>
Nothing.
</div>
</div>
</template>
<script>
export default {
props: ['input_name', 'post_url', 'bind_user'],
data() {
return {
file: false
}
},
methods: {
handleFile() {
this.file = this.$refs.file.files[0];
this.submitFiles();
},
submitFiles() {
let formData = new FormData();
formData.append('file', this.file);
formData.append('bind_user', this.bind_user);
axios.post( this.post_url,
formData,
{
headers: {
'Content-Type': 'multipart/form-data'
}
}
).then(function(response) {
this.file.id = response.data.id;
console.log(this.file); << This show's object array and there is id field there along with name and other data.
}.bind(this)).catch(function(response) {
});
},
}
}
</script>
Что у меня есть проблема понимания, как я могу изменить текст и входное значение на основе событий или ответа.Когда файл отправлен и успешно загружен, я получаю ответ обратно:
{success: true, id: 42}
Очень просто, но когда я получаю ответ, я хочу изменить это значение id
на скрытом вводе, так что в итоге у меня есть это:
<input type="hidden" :name="input_name" :value="42"/>
И, возможно, изменить текст поля ввода с Choose file
на Change file
.
Если бы я сделал это с помощью jquery и ajax, я мог бы сделать это очень просто, на ajaxУспешно найти элемент с input_name
id и изменить значение.
Но на Vue это выглядит так, будто я наткнулся на это.
РЕДАКТИРОВАТЬ:
Я немного продвинулся ия теперь запутался больше, потому что я получаю ответ, и я получаю file.id
в console.log, но в шаблоне vue тот же id
пуст, но из того же массива file.name
показывает имя файла.