Vue ElementUI在el-table中使用el-popover问题
作者:小聪聪 发布时间:2024-05-09 15:22:15
ElementUI在el-table中使用el-popover
Vue ElementUI在el-table中使用el-popover,点击嵌套内容中的确定或取消来关闭el-popover。
<el-table-column width="100" align="center" label="操作">
? <template slot-scope="scope">
? ? <el-popover width="160" :ref="`popover-${scope.$index}`">
? ? ? <p>确定删除该项吗?</p>
? ? ? <div style="text-align: right; margin: 0">
? ? ? ? <el-button type="text" size="mini" @click="scope._self.$refs[`popover-${scope.$index}`].doClose()">
? ? ? ? ? 取消
? ? ? ? </el-button>
? ? ? ? <el-button type="danger" size="mini" >确定</el-button>
? ? ? </div>
? ? ? <el-button type="text" slot="reference">删除</el-button>
? ? </el-popover>
? </template>
</el-table-column>
方法二
<el-table-column width="100" align="center" label="操作">
? <template slot-scope="scope">
? ? <el-popover width="160" :ref="`popover-${scope.$index}`">
? ? ? <p>确定删除该项吗?</p>
? ? ? <div style="text-align: right; margin: 0">
? ? ? ? <el-button type="text" size="mini" @click="handleClose(scope.$index)">
? ? ? ? ? 取消
? ? ? ? </el-button>
? ? ? ? <el-button type="danger" size="mini" >确定</el-button>
? ? ? </div>
? ? ? <el-button type="text" slot="reference">删除</el-button>
? ? </el-popover>
? </template>
</el-table-column>
<script>
?...
? ?handleClose(index) {
? ? ?this.$refs[`popover-${index}`].doClose()
? ?}
?...
</script>
方法三
<div ref="closepopover">
<el-table-column ?label="操作">
?<template slot-scope="item">
? <el-popover
? ? placement="right"
? ? title="确定删除?"
? ? width="200"
? ? v-model="item.row.visible"
? ? trigger="click">
? ? <div style="text-align: right; margin: 0">
? ? ? <el-button size="mini" type="text" @click="updateVisible()">取消</el-button>
? ? ? <el-button type="primary" size="mini" @click="updateVisible()">确定</el-button>
? ? </div>
? ? <el-button slot="reference">删除</el-button>
? </el-popover>
</template >
</el-table-column>
//也可解决
updateVisible(){
? ? this.$refs.closepopover.click();
}
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-popoverdoClose()
: 关闭el-popoverdoToToggle()
: 取反 关闭则展示,展示则关闭
tips:
当el-popover 内 不写 slot=“reference” 其中内容是不会展示(div内容)的 例如:
<el-popover>
?<div>没有使用slot插槽</div>
</el-popover>
来源:https://blog.csdn.net/weixin_44745330/article/details/106055977


猜你喜欢
- 一、遇到的问题在向数据库中存入汉字时遇到这样的问题:Cause: java.sql.SQLException: Incorrect stri
- Python list列表添加元素方法实际开发中,经常需要对 Python 列表进行更新,包括向列表中添加元素、修改表中元素以及删除元素。&
- 前言在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本。映射到数据库中。创建
- 原始数据原始数据大致是这样子的:每条数据中的四个数据分别是 当前节点名称,节点描述(指代一些需要的节点属性),源节点(即最顶层节点),父节点
- 在Server和Client通讯中,由于网络等原因很可能会发生数据丢包的现象。如果数据缺失,服务端接收的信息不完整,就会造成混乱。我们需要在
- 前言JSON是一种轻量级的数据交换格式。易于阅读和编写。 golang 提供了 encoding/json 包来操作JSON数据。1. 结构
- 前言近日在做一个报表功能里面有一个这样的需求是统计各部门在某一月入职和离职的人数我的步骤先查出入职的人数SELECT dept ,COUNT
- 主要讲 except 和 not in 的性能上的区别。 CREATE TABLE tb1(ID int) CREATE TABLE tb2
- 概述Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界.数据类型转换数据类型转换可以帮助我们将一
- 但是如果在utf-8编码下,一个汉字是占3个字符长度的,比如字符串$str=”你好啊!!”; 如果你用strlen函数来判断,长度是11,正
- 前言通常在项目中,一般都需要一种编程语言来操作数据库,使用Python来操作数据库有着天然的优势,因为Python的字典和MongoDB的文
- 本文详细讲述了Python2.7环境Flask框架安装方法。分享给大家供大家参考,具体如下:第1步:确保本机已经安装有python,下载ea
- 1、不指定开始和结束的索引[:],这样得到的切片就可以包含整个列表,然后给切片一个新的变量,从而实现复制列表。2、创建原始列表的副本,两个列
- django常见数据库配置错误出现报错代码为1045的这类几乎都是数据库配置出错报错1django.db.utils.Operational
- 本文实例讲述了php字符串过滤strip_tags()函数用法。分享给大家供大家参考,具体如下:strip_tags — 从字符串中去除 H
- import httplibimport osimport timedef check_http(i):
- 本文实例讲述了JS实现淘宝支付宝网站的控制台菜单效果。分享给大家供大家参考。具体如下:这是一款支付宝网站中的控制台总菜单,可实现动画效果的显
- 本文实例讲述了wxPython定时器wx.Timer简单应用。分享给大家供大家参考。具体如下:# -*- coding: utf-8 -*-
- Asp(Active Server Pages)是Web服务器端脚本编写环境,可以使用Vbscript/Jscript两种脚本来编写.作为我
- 举个简单的例子:(此仅限于修改change_form页面)原来的时候,change_form_list是包含这些按钮的:因为此页面继承了{%