Я пытаюсь показать изображение предварительного просмотра, когда пользователь загружает изображение. По какой-то причине мой код работает, когда я использую <input>
с обычным Bootstrap классом form-control
, но когда я использую Bootstrap - Vue <b-form-file>
, я получаю ошибку: Error in render: "TypeError: Cannot read property 'name' of undefined"
Данные:
data() {
return {
options: [
{ text: "Full Time", value: "Full Time" },
{ text: "Part Time", value: "Part Time" },
],
profileData: {
photo: '',
employment_type: "Full Time",
date_of_birth: "",
experience: "",
skills: "",
},
};
},
Мой метод:
methods: {
attachImage() {
this.profileData.photo = this.$refs.profilePhoto.files[0];
let reader = new FileReader();
reader.addEventListener('load', function() {
this.$refs.profilePhotoDisplay.src = reader.result;
}.bind(this), false);
reader.readAsDataURL(this.profileData.photo);
},
}
Bootstrap Код, этот код работает:
<div role="group" class="form-group">
<label for="photo" class="d-block">Upload Profile Photo (optional)</label>
<div v-if="profileData.photo.name">
<img src="" ref="profilePhotoDisplay" class="w-100px" />
</div>
<input
id="photo"
v-on:change="attachImage"
ref="profilePhoto"
type="file"
class="form-control"
>
</div>
Bootstrap - Vue Код, это дает мне ошибку:
<div v-if="profileData.photo.name">
<img src="" ref="profilePhotoDisplay" width="140" />
</div>
<b-form-group label="Upload Profile Photo (optional)" label-for="image">
<b-form-file
id="photo"
v-on:change="attachImage"
ref="profilePhoto"
type="file"
></b-form-file>
</b-form-group>