首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@单击v-for中数据数组中的单个对象。

@单击v-for中数据数组中的单个对象。
EN

Stack Overflow用户
提问于 2021-11-18 15:44:56
回答 2查看 195关注 0票数 2

Vue和js在这个问题上非常陌生,很可能我错过了一个基本的基本问题,但我试图在数组中切换单独单击的图像类,而不同时切换所有的图像切换类。

模板:

代码语言:javascript
复制
   <div class="collage-banner">
                <img
                    v-for="image in images"
                    @click="imgSelected()"
                    :alt="image.alt"
                    class="collage"
                    :class="image.class"
                    :src="image.url"
                    :key="image"
                />

联署材料:

代码语言:javascript
复制
export default {

data() {
    return {
        images: [
            { url: img1, class: "img-1", alt: "collage img" },
            { url: img2, class: "img-2", alt: "collage img" },
            { url: img3, class: "img-3", alt: "collage img" },
            { url: img4, class: "img-4", alt: "collage img" },
            { url: img5, class: "img-5", alt: "collage img" },
            { url: img6, class: "img-6", alt: "collage img" },
            { url: img7, class: "img-7", alt: "collage img" },
            { url: img8, class: "img-8", alt: "collage img" }
        ]
    }
},
methods: {
    imgSelected() {
        if (this.images[0].url === img1) {
            this.images[0].class = 'collage-click'
        } else if (this.images[0].url === img2) {
            this.images[0].class = 'img-1'
        }
        if (this.images[1].url === img2) {
            this.images[1].class = 'collage-click'
        } else if (this.images[1].url === img1) {
            this.images[1].class = 'img-2'
        }
    }
}

}

让我知道,如果进一步的信息是需要的,我更有可能已经采取了完全错误的方式!提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-18 16:51:53

您可以将图像索引传递到您的imgSelected方法中,并使用它来更新该图像的类。

例如,

模板:

代码语言:javascript
复制
<img
  v-for="(image, index) in images" << updated
  @click="imgSelected(index)" << updated
  :alt="image.alt"
  class="collage"
  :class="image.class"
  :src="image.url"
  :key="image"
/>

剧本:

代码语言:javascript
复制
methods: {
    imgSelected (index) { // add index param
            // use index to get relevant image from array
            this.images[index].class = 'collage-click'
    }
}

如果您想从选定的图像(例如用户单击图像1,然后图像2 )中删除类,则还必须在更新最新单击的图像之前遍历图像和重置类。

例如。

代码语言:javascript
复制
methods: {
        imgSelected (index) {
            // reset all image classes
            for (const i in this.images) {
               this.images[i].class = `img${i + 1}` // reset image class e.g. img2 (need to add 1 to index since it will start at 0)
            }
            
            // use index to get relevant image from array
            this.images[index].class = 'collage-click'
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2021-11-18 18:29:59

更好的方法是在图像数组中设置一个名为clicked的标志,并根据该布尔值切换类。

代码语言:javascript
复制
data() {
    return {
        images: [
            { url: img1, class: "img-1", clicked: false, alt: "collage img" },
            { url: img2, class: "img-2",clicked: false, alt: "collage img" },
            { url: img3, class: "img-3",clicked: false, alt: "collage img" },
            { url: img4, class: "img-4", clicked: false, alt: "collage img" },
        ]
    }
},
methods: {
    imgSelected (index) { // add index param
            // use index to get relevant image from array
            this.images[index].clicked = !this.images[index].clicked;
    }
}

在模板中

代码语言:javascript
复制
<img
  v-for="(image, index) in images" << updated
  @click="imgSelected(index)" << updated
  :alt="image.alt"
  :class="['collage', {`${image.class}`: !image.clicked, 'collage-click': image.clicked}]"
  :src="image.url"
  :key="image"
/>

注意:如果您希望始终应用collage,那么可以在数组中使用它。如果您根本不想要拼贴类,而jus想在img1collage-click之间切换,那么jus可以有一个类似于

代码语言:javascript
复制
:class="{`${image.class}`: !image.clicked, 'collage-click': image.clicked}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70022792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档