Одним из моих компонентов Vue является сетка изображений.Я хочу, чтобы пользователь мог "выбрать" изображение, нажав на него.Как только изображение было выбрано, его стиль должен измениться;если щелкнуть снова, он снова не будет выбран.
Мне нужно привязать 'image-box-selected' к определенному изображению, но я не могу этого сделать.Я не могу просто прочитать атрибут данных, потому что в противном случае все изображения будут выбраны одновременно.Поэтому вместо этого у меня есть selectedImages obj, который выступает в качестве словаря для каждого imageId (поэтому selectedImages ['qhasdk'] будет отображаться либо в false, либо в true).
Следующий фрагмент не вызывает никаких проблем, а selectedImages являетсясгенерировано и обновлено правильно.Проблема в том, что 'image-box-selected' фактически никогда не появляется, даже тогда соответствующий ключ для selectedImages был изменен на true.
Vue.component('images-grid', {
props: ['env', 'images'],
data: function () {
return {
selectedImages: {}
}
},
methods: {
getSourceUrl: function (imageId) {
return getRootUrl() + '/image/' + this.env + '/' + imageId
},
updateSelectedImages: function (imageId) {
/* First we check we populated selectedImages with the IDs. */
if (Object.keys(this.selectedImages).length === 0) {
for (var i = 0; i < this.images.length; i++) {
this.selectedImages[this.images[i].id] = false;
}
}
this.selectedImages[imageId] = !this.selectedImages[imageId];
}
},
template: `
<div>
<img
v-for="image in images"
v-bind:id="image.id"
class="image-box image-box-selectable"
v-bind:class="{'image-box-selected': selectedImages[image.id]}"
v-bind:src="getSourceUrl(image.id)"
v-on:click="updateSelectedImages(image.id)">
</div>
`
})