Vue.JS v-for循环后,想要实现每个单独项实现单独的show的true\false 5

问题是showGallery属性默认为false,但是循环后,所有的都是false,如果点击某一个gallery,所有的showgallery都变成了ture,所以只会显... 问题是 showGallery 属性默认为false,但是循环后,所有的都是false, 如果点击某一个gallery, 所有的showgallery 都变成了ture, 所以只会显示最上层的那个galler(别的被覆盖在底层)。
这里需要吧每个循环项,单独设置ture or false,相互之间不影响,应该怎么操作呢?

项目是, 循环项目里,会循环 一个图片 和一个组件, 点击对应的图片回弹出对应的gallery组件。在点击回隐藏组件。

<div v-for="item of list"
:key="item.id">

<div class="item">
<img class="item-img " :src="item.imgUrl" @click="handleGalleryClick($index)">
</div>

<CommonGallery
:imgs="item.screenshots"
v-show="showGallery"
@close="handleGalleryClose"></CommonGallery>
</div>
</div>
</template>

<script>
import CommonGallery from "./../../../common/gallery/Gallery";

export default {
name: "ProjectList",
components: {
CommonGallery
},
props: {
list: Array
},
data() {
return {
showGallery: false
};
},
methods: {

handleGalleryClick() {
this.showGallery= true;
},
handleGalleryClose() {
this.showGallery = false;
}
}
};
</script>
展开
 我来答
136775565
2019-03-08 · TA获得超过1113个赞
知道小有建树答主
回答量:866
采纳率:88%
帮助的人:829万
展开全部

把showGallery维护成一个数组就能实现了

<img class="item-img " :src="item.imgUrl" @click="handleGalleryClick(item.id)">

<CommonGallery
    :imgs="item.screenshots"
    v-show="showGallery.includes(item.id)"
    @close="handleGalleryClose(item.id)">
</CommonGallery>
data() {
  return {
    showGallery: [],
  };
},
methods: {
  handleGalleryClick(id) {
    this.showGallery.push(id);
  },
  handleGalleryClose(id) {
    const index = this.showGallery.indexOf(id);
    this.showGallery.splice(index, 1);
  },
追问
谢谢,目前打开各项可以,但是close这个回报错,没法关闭。
TypeError: this.showGallery.indexof is not a function
百度网友a44bb7e
2019-03-08 · TA获得超过190个赞
知道小有建树答主
回答量:269
采纳率:69%
帮助的人:71.4万
展开全部
你这是一个由对象组成的数组,你应该给每个对象加一个show的属性去控制,而不是给所有的共用一个show;
追问
嗯,我也考虑过,但是在json文件中加个这属性,感觉有点奇怪~可有别的方法?
目前我的数据是父组件接受的json,然后传到了这个子组件中。
追答
要独立控制,就只能有独立的属性去作为开关,不然没法实现吧;我目前就只想到了这种
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式