el-popover 在el-table 中 会出现不显示情况

        Popover 的属性与 Tooltip 很类似 都是弹出提示,一般情况下,如果是固定提示内容的话,采取Tooltip 简单了事。

        接触到一个需求,el-table其中一列,根据后端返回的数据不同展示不同的 btn,其中一个btn 需要鼠标hover 的时候 获取该行元素的 id(需要在hover的时候 通过调接口获取),此时使用Tooltip就无法达到动态显示提示内容的效果了。

        Popover 在基于Tooltip 有@show事件,当提示内容hover的时候,可以触发@show回调,此时可以去请求后端接口获取需要的数据。

        问题: 在el-table-column 内 使用el-popover 有时候会出现hover 不显示提示框的情况

总所周知,el-table-column 代表的是 列,在其中写 一个el-popover ,其相当于 写了N个,(N取决于el-table 中 data 的 数组长度) table 常常 与 分页 一起使用

        以下属于个人猜测,为了解释给自己听的:

由于el-table data数据长度,遍历出多个 el-popover 而 el-popover 是根据条件row.staus === 1 判断是否出现的 (其中el-popover 的一些熟悉 就不写了)

<el-table-column >
 <template #default="{row}">
  <el-popover ....>
    <span>需要显示的文本内容</span>
    <div slot="reference" v-if="row.status === 1">查看内容</div>
  </el-popover>
  <div v-if="row.status === 2">暂无内容</div>
 </template>
</el-table-column>

  此时可能会出现一种情况,第一页table 有10条数据, 其中第一条 和 第5条的row.status === 1 

第二页 只有2条数据,第一条row.status === 2 第二条 row.status === 2

        bug 复现: 当我第一次进入页面, hover 第一页的第一条数据 能够正常显示 <span>内容,也能正常显示第五条<span>内容,

        当我切换到第二页,由于第二页只有两条数据,而且status === 2 所以 hover 是不会显示数据的, 这个时候 我再切换到第一页,再次hover 到第一条数据发现,此时row.status === 1 的那条数据不再显示<span>内容了 然而 第一页的 第五条数据 row.status ===1 hover 还是能正常显示<span>内容

        经过上述操作,(个人觉得,没有官方判断)第一页的第一条本应该hover 展示<span>内容的 却没有展示 是因为 可能复用了 第二页第一条row.status === 2 的el-popover

为了防止 el-popover 复用,采取两个方法 :

        1. 给el-popover不同的ref

        2. 将v-if 判断同步移到 el-popover里

<el-table-column >
 <template #default="{row}">
  <el-popover v-if="row.status === 1" :ref="`node-${row.id}`">
    <span>需要显示的文本内容</span>
    <div slot="reference" v-if="row.status === 1">查看内容</div>
  </el-popover>
  <div v-if="row.status === 2">暂无内容</div>
 </template>
</el-table-column>

当 row.status !==1 时 el-popover 自然而然就被销毁了,也就不存在复用的情况,若出现第一页 和 第二页 都是row.status === 1 的情况,此时 由于ref 不同也不会复用  (下划线内容 为个人判断)

经过上述操作,大致能解决 el-popover 不显示的问题 (由于个人对该组建理解不是很深刻,所以不敢打包票 百分百解决)

额外内容:

        通过查看el-popover 的源码 发现 存在一些 element 组件options没有 给出的一些方法,可以配合 ref 一起使用,能实现一些特殊功能的处理 。 通过 this.$refs['el-popover的ref'].方法()

        通过查看源码可以发现,el-popover 中的methods 有以下几个方法:

doShow() : 展示el-popover

doClose() : 关闭el-popover

doToToggle() : 取反  关闭则展示,展示则关闭

......

tips:

当el-popover 内 不写 slot=“reference” 其中内容是不会展示(div内容)的 例如:

<el-popover>
 <div>没有使用slot插槽</div>
</el-popover>

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在el-table表头使用el-popover,您需要为每个popover绑定一个独特的变量。以下是一个例子,展示了如何在el-table表头使用el-popover: ```html <template> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> <template slot="header"> <div> 日期 <el-popover placement="bottom" width="200" trigger="hover" v-model="popoverVisible1" > <p>这是一个日期选择器</p> <el-date-picker v-model="date" type="date" placeholder="选择日期"></el-date-picker> </el-popover> <el-button slot="reference" icon="el-icon-question" size="mini" @click="popoverVisible1 = true" ></el-button> </div> </template> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> <template slot="header"> <div> 姓名 <el-popover placement="bottom" width="200" trigger="hover" v-model="popoverVisible2" > <p>这是一个输入框</p> <el-input v-model="name" placeholder="请输入姓名"></el-input> </el-popover> <el-button slot="reference" icon="el-icon-question" size="mini" @click="popoverVisible2 = true" ></el-button> </div> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { date: '2022-01-01', name: '张三' }, { date: '2022-01-02', name: '李四' }, { date: '2022-01-03', name: '王五' } ], popoverVisible1: false, popoverVisible2: false, date: '', name: '' }; } }; </script> ``` 在这个例子,我们为每个el-popover绑定了一个独特的变量(popoverVisible1和popoverVisible2),这样每个popover就可以正常渲染了。同时,我们还为每个popover添加了一个el-button,当用户将鼠标悬停在这个按钮上时,popover显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值