element-ui 使用对象控制多 popover 的显示与关闭

本文介绍如何使用Vue.js实现房间列表中,每个<p>元素点击后弹出对应的独立popover,通过v-model绑定多键值对对象控制popover显示。尝试了用数组控制但未成功,最终分享了正确的方法和解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    <template v-for="(room, idx) in rooms ">
        <p >
            {{  idx + "->" + room.name}}
        </p>
    </template>

假设是这样的一个用循环输出的<p>  ,每个<p> 点击时显示一个单独的 popover。

代码实现:


    new Vue({
        el: '#app',
        data () {
            return {
                rooms: [ {name:"111"}, {name:"222"}, {name:"333"}, {name:"444"}, {name:"555"}],
                popover:{},
            }
        }
    })
    <template v-for="(room, idx) in rooms ">
        <p  @click="popover[idx] = !popover[idx]" >
            {{  idx + "->" + room.name}}
        </p>

        <el-popover
                placement="right"
                width="400"
                trigger="click" v-model="popover[idx]">
            <p>Norway {{  idx + "->" + room.name}} </p>
        </el-popover>
    </template>

这里的 popover 的数据类型是一个多键值对的对象:

popover: {

0:false,

1: true,

2: false,

}

GIF效果:

 坑:

最开始想到的是 popover 有 rooms.length 个,那么就考虑用一个数组来控制,类似这样:

结果发现这样没有成功,具体原因不明确

popoverArray:[false, false, true, true] 


    new Vue({
        el: '#app',
        data () {
            return {
                rooms: [ {name:"111"}, {name:"222"}, {name:"333"}, {name:"444"}, {name:"555"}],
                popoverArray:[],
            }
        }
    })
 
    <template v-for="(room, idx) in rooms ">
        <p  @click="popoverArray[idx] = !popoverArray[idx]" >
            {{  idx + "->" + room.name}}
        </p>

        <el-popover
                placement="right"
                width="400"
                trigger="click" v-model="popoverArray[idx]">
            <p>Norway {{  idx + "->" + room.name}} </p>
        </el-popover>
    </template>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zonson9999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值