#javascript #vue.js
#javascript #vue.js
Вопрос:
У меня есть сетка с 3 столбцами, которые я сопоставляю с изображениями, которые имеют img-src, предоставленные axios на моей веб-странице.
<div class="row my-row" v-for="(banner, index) in bannerArray" :key="index">
<div class="banner-section">
<div class="banner-name">
<h3>{{banner.banner_position}}</h3>
</div>
<div class="preview-home-banner">
<img :src="bannerArray[index].banner_url" alt="image_banner" class="image-banner">
</div>
<div class="row my-row">
<input type="file" id="file-upload" accept="image/png, image/jpg ,image/jpeg" @change="onFileChange(index)"/>
</div>
</div>
data () {
return {
file: null,
bannerArray: [],
showNotifModal: false,
homeBannerPreview: null,
contactUsBannerPreview: null,
aboutBannerPreview: null,
communityBannerPreview: null
}
},
mounted () {
this.getBannerList()
},
methods: {
getBannerList () {
axios.get(ConfigFile.basic_url '/banner/get_all').then((response) => {
this.bannerArray = response.data.data
this.homeBannerPreview = this.bannerArray[0].banner_url
this.contactUsBannerPreview = this.bannerArray[1].banner_url
this.aboutBannerPreview = this.bannerArray[2].banner_url
this.communityBannerPreview = this.bannerArray[3].banner_url
}).catch((error) => {
console.log(error)
})
},
onFileChange (e) {
this.file = e.target.files[0]
this.bannerArray[0].banner_url = URL.createObjectURL(this.file)
}
}
Как мне заменить одну из отдельных ячеек изображения img-src в моей сетке, а затем отобразить ее после изменения?
Комментарии:
1. Похоже, это
bannerArray
атрибут данных, поэтому он должен быть отзывчивым. Итак, все, что вам нужно сделать, это обновить URL-адрес в вашем bannerArray, и страница должна повторно отобразить его для вас.this.bannerArray[index].banner_url = '/some/url/to/an/image.jpg'
2. я сделал это.bannerArray[0].banner_url = URL.createObjectURL(this.file), но никаких изменений файл введен, но изображение не изменилось, сэр @bassxzero
3. Опубликуйте свое определение компонента.
4. Вы передаете индекс обработчику событий и вызываете его
e
, поэтомуe.target.files
, вероятно, значение null. Попробуйте это@change="onFileChange($event, index)"
вместо@change="onFileChange(index)"
5. не забудьте также написать правильный индекс в вашем bannerArray 😉
Ответ №1:
Вы передаете обработчику index
события и вызываете его e
, поэтому e.target.files
, вероятно, значение null.
Измените это
<input type="file" id="file-upload" accept="image/png, image/jpg ,image/jpeg" @change="onFileChange(index)"/>
Для этого
<input type="file" id="file-upload" accept="image/png, image/jpg ,image/jpeg" @change="onFileChange($event, index)"/>
И это
onFileChange (e) {
this.file = e.target.files[0]
this.bannerArray[0].banner_url = URL.createObjectURL(this.file)
}
для этого
onFileChange (e, i) {
this.file = e.target.files[0]
this.bannerArray[i].banner_url = URL.createObjectURL(this.file)
}