Element-UI表格嵌入popover出现的问题以及解决方案

这篇具有很好参考价值的文章主要介绍了Element-UI表格嵌入popover出现的问题以及解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近几天遇到一个比较棘手的问题,需求是在触发表格某一列的cell,弹窗展示新的数据(不是表格内的数据,而是需要重新向后端请求)

我这里使用了popover展示弹窗

代码是删减过的,为了更清楚地记录,有些这里没有用到的代码就删了

<el-table :data="tableData" @cell-mouse-enter="cellEnter">
    <el-table-column
        prop="one"
        label="第一列"
        align="center">
        <template scope="scope">
            <el-popover
                 id="popover1"
                 trigger="hover"
                 placement="right"
                 :visible-arrow="false"
                 :slot= popoverData
                 :ref= "`popover1` + scope.$index"
                 :popper-class= "{'pop-con' : vis !== true}">
                 <div v-if="vis === true" class="tips-con">
                      <p>事件1:{{popoverData.satisfied}}件</p>
                      <p>事件1:{{popoverData.general}}件</p>
                      <p>事件3:{{popoverData.basically}}件</p>
                      <p>事件4:{{popoverData.dissatisfied}}件</p>
                 </div>
                 <div class="name-wrapper" slot="reference"
                       @mouseenter="openAction(scope.$index)"
                       @mouseleave="cancelAction(scope.$index)">
                       {{ scope.row.one }}
                 </div>
             </el-popover>
          </template>
    </el-table-column>
</el-table>

1. 触发方式是hover(写在popover的trigger中),因为要从后端获取数据,所以在table加入鼠标移入事件(@cell-mouse-enter)。

cellEnter(row, column){
    if(column.label === "第一行"){
          this.popoverData = [];
          this.vis = false;
          this.$axios({
              method: "post",
              url: "XXXX/getPopoverData.action",
              data: {
                  one: row.one
              }
           }).then((res) => {
               this.popoverData = res.data.content.result.data;
               this.vis = true;
           })
     }
},

2. 获取的数据存储在全局变量popoverData中,用:slot给弹窗内容赋值。

3. 表格的内容要展示在popover组件的外部div中,此时,要在这个外部div的标签内写"slot='reference'"。

4. 由于是在表格内,每一个cell都共用一个popover,鼠标快速滑入几个cell时,会出现多个popover同时出现的情况,非常影响用户体验,因此,给popover加入唯一标识,用:ref来绑定scope.$index来实现。

5. 此时出现了一个问题,鼠标初次滑入第一个cell显示正常,滑入下一行cell时会出现popover先为空闪烁一下,然后才显示数据。因此,在显示表格内容的外部div设置了鼠标移入移出时的事件@mouseenter和@moueleave,用$refs在鼠标移入时执行doShow()方法,移出时执行doClose方法。

cancelAction(index){
    let refName = "popover1" + index;
    this.$refs[refName].doClose();
},
openAction(index){
    let refName = "popover1" + index;
    this.$refs[refName].doShow();
},

6. 第5个问题还存在,在显示弹窗的div中加入v-if语句控制,写入全局变量vis,初始值为false,当数据为空时,vis为false不显示,数据传入时vis设为true,显示,控制语句在第二个代码块的cellEnter方法中。

7.熬到现在已经过了两天,popover显示仍然有问题,弹窗的div在popover上面,popover有自己的样式,因此用自定义样式:popper-class修改样式,并且用全局变量vis控制显示的时机,这里这样写会出现一个警告type check failed for prop "popperClass". Expected String, got Object 现在未解决,再加上修改了el-popover的样式才能正常显示,试着删除pop-con样式,但是删了之后就会出现弹窗闪烁的问题。

.tips-con {
    background-color: #000000;
    font-size: 14px;
    border: 0px;
    opacity: 0.8;
    color: #ffffff;
}
.pop-con{
    display: none;
    background-color: #000000;
}
.el-popover {
    background-color: #000000;
    border: 0px;
}

8.最后一个问题,popover自带的小三角箭头没有改变其样式,而且也挺影响美观的,查了一下element-ui文档,直接用visible-arrow就可以去掉。但是不可以直接赋值,要在前面加冒号绑定一个false值。关于冒号:vue中的冒号是v-bind的缩写,加冒号的说明后面是一个变量或表达式,没加冒号的说明后面就是一个字符串字面量。

到这里需求就完成了!

总结:第一次接触popover,还是有挺多东西的,需要系统学习一下vue,细节上的小问题其实不需要花太多时间来解决。文章来源地址https://www.toymoban.com/news/detail-568846.html

到了这里,关于Element-UI表格嵌入popover出现的问题以及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于element-ui表格 鼠标悬停背景颜色修改问题

    element-ui鼠标悬停时行背景色默认为白色,当表格字体为白色时容易看不到文字,因此需要修改鼠标悬停时的背景色。 html使用el-table后,在css样式中添加以下代码即可修改鼠标悬停后的背景色。(未使用scss和less) 同时补充鼠标点击后行高亮颜色修改,需要在el-table标签内添加

    2024年02月11日
    浏览(78)
  • element-ui 的el-popover 自定义弹出和关闭

    业务需求: 鼠标悬停打开弹窗,点击弹窗里面的内容后关闭弹窗 Element 中 Popover 弹出框的弹出方式有 hover,click,focus,手动激活几种方式,根据业务需求,可以如下使用: el-popover弹出框 关闭和打开分别用 doClose() 和 doShow() 方法 ,Element UI文档中没有提到这两个方法 通过方

    2024年02月16日
    浏览(63)
  • 解决vue+element ui 在使用element表格时,出现表格表头与内容对不齐的问题

    我们在使用element ui的表格功能时,出现如下图所示表格头与内容对不齐的问题时解决方法如下  方法一: 在App.vue中加入 方法二: 在自建的css文件中加入  body .el-table th.gutter{ display: table-cell!important; } 然后使用下列语句将css文件导入App.vue中 效果如下图所示      

    2024年02月15日
    浏览(63)
  • 解决 elementUI 的 table 表格改变数据不更新问题 解决 vue数据不更新问题 element-ui 表格数据不更新

    利用 v-if这些都是一个逻辑,都是改变事件,达到数据刷新,没必要用 v-if 消耗性能 比较耗性能

    2023年04月08日
    浏览(51)
  • < element-Ui表格组件:表格多选功能回显勾选时因分页问题,导致无法勾选回显的全部数据 >

    在 Vue + elementUi 开发中,elementUI中表格在本身是自带多选功能的,但是在某些情况下,并不能完全适用,甚至可能产生bug。例如本次案例所遇Bug,情景如下: 本案例场景 :在表单中, 通过表单参数筛选某个明细表格数据 ,后端要求新增时可多选明细表格中的内容。但由于明

    2024年02月09日
    浏览(58)
  • element-ui时间日期选择器回显功能以及不能修改问题的解决

    地址:element-ui时间日期选择器不能修改问题的解决 - 走看看 属于是强制更改 编辑的时候,修改了时间,控制台中能看到已修改,可是页面上确没修改而且也不能删除,出现这样的问题,该如何解决? 解决方案:在获取数据回显的时候使用$set: 刚开始是直接赋值(如果不是标

    2024年02月11日
    浏览(45)
  • element-ui select数据回显显示数字的问题 el-select校验失效出现阿拉伯数字问题

    初始化参数     后端传送数据给前端后,下拉框回显结果为数字! 最近遇到个问题后端返回结果后.前端双向绑定回显结果为数字.分析原因后发现是数据类型不一致导致回显异常 解决方案 把option的value转为字符类型即可 1  

    2024年02月16日
    浏览(42)
  • Vue2.0+Element-ui(2.15.13)出现el-table不显示问题解决方案

    遇到的问题: Element-ui中的 el-table组件 无法正常显示; 1.安装的Vue是2.0版本; 2.安装的Element-ui是2.15.13版本 原因: 1.一个项目调用了element-ui和vant两个ui库,有冲突; 2.Element-ui是2.15.13版本依赖比较高;   解决方案: 1.npm uninstall element-ui;下载Element-ui 2.npm install element-ui@2.8.3

    2024年02月11日
    浏览(56)
  • element-ui 表格添加校验

      html片段     js片段 css片段

    2024年02月15日
    浏览(50)
  • element-ui表格Table详解

    先给大家展示一下效果 Table 属性  属性名 说明 类型 可选值 默认值 data 显示的数据 array — — height Table 的高度, 默认为自动高度。 如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。 s

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包