首页 > 其他分享 >关于element-ui 中table的问题以及解决

关于element-ui 中table的问题以及解决

时间:2023-09-07 17:56:34浏览次数:33  
标签:ui 关闭 表格 element 单选 dialog 按钮 table 操作

这篇文章是记录上个月开发中的问题,有知道原理的请发送邮件

0727

我吐了,element-ui,这玩意咋这么多坑

背景

点击某个按钮,打开内嵌表单的dialog,然后不能让用户手动输入值,要根据后台去查可选项,将可选项变成可视化的表格,表格包含基本信息,再让用户去选;因为有两项值都是这样操作的,即通过表格选择,然后两组数据有部分重叠,但属性名有部分不同,为了省事,就做在一个dialog中了,然后坑爹的地方来了;

在同一个Dialog中渲染不同的表格,其中有使用template的列,该列用来进行操作,刚开始想着复用,即将属性名相同的列不做处理,将其他有不同的列用v-if作判断,该显示哪个,然后翻车了,列的顺序是乱的,数据有时候也不对,就变成了两个表格,每个表格用v-if判断。

然后就又翻车了,见下方问题说明。

问题

在刚点进的时候正常,第一个表格有7列,第七列是操作按钮,第二个表格有六列,第六列是操作按钮,按钮的功能是一样的,绑定的方法也是同一个,然后神奇的来了,显示第一个表,显示正常,关闭Dialog后显示第二个表格,也正常;关闭后再显示第一个表格,第六列变为了操作按钮,列名没有变化,但内容变了???,下方代码是例子

  <el-dialog :title="Title" :visible.sync="dialogVisible" width="1000px">
     <el-table v-if="type==1" :data.sync="data">

        <el-table-column label="1" property="1"></el-table-column>
        <el-table-column label="2" property="2"></el-table-column>
        <el-table-column label="3" property="3"></el-table-column>
        <el-table-column label="4" property="4"></el-table-column>
        <el-table-column label="5" property="5"></el-table-column>
        <el-table-column label="6" property="6"></el-table-column>

       <el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <el-button size="mini" type="primary" @click="Sumit(scope.row)">选择</el-button>
          </template>
        </el-table-column>
      </el-table>

   <el-table  v-if="type==2" :data.sync="data">
    	<el-table-column label="1" property="1"></el-table-column>
        <el-table-column label="2" property="2"></el-table-column>
        <el-table-column label="3" property="3"></el-table-column>
        <el-table-column label="4" property="4"></el-table-column>
        <el-table-column label="5" property="5"></el-table-column>

       <el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <el-button size="mini" type="primary" @click="Sumit(scope.row)">选择</el-button>
          </template>
        </el-table-column>
      </el-table>

    </el-dialog>

问题解决

我认为是渲染第二个表格后,再次渲染第一个表格,虚拟dom对比将第二个表格的操作列,直接识别成是相同的节点,没有删除,在第二个表格内部加上blockquote,然后就好使了

 <el-table  v-if="type==2" :data.sync="data">
	<blockquote>
    		<el-table-column label="1" property="1"></el-table-column>
        	<el-table-column label="2" property="2"></el-table-column>
        	<el-table-column label="3" property="3"></el-table-column>
       	 	<el-table-column label="4" property="4"></el-table-column>
        	<el-table-column label="5" property="5"></el-table-column>

       		<el-table-column label="操作" align="center">
          	   <template slot-scope="scope">
            		<el-button size="mini" type="primary" @click="Sumit(scope.row)">选择</el-button>
          	   </template>
        	</el-table-column>
	</blockquote>
</el-table>

问题2

好使是好使了,但是乱序了,第一列跑到最后一列了。。。

问题2解决

改变思路,将操作按钮列去掉,在第一列添加单选按钮,绑定需要传输的值,选中后点击表格下方的确认按钮,成功解决

     <el-table v-if="type==1" :data.sync="data">
        <el-table-column label="选择" align="center">
          <template slot-scope="scope">
            <el-radio v-model="radio" :label="scope.row.id1">
              <!--blockquote 为了占位,不然el-radio会默认在后面显示label内容,但我们不需要显示,<div></div>也可以 -->
              <blockquote></blockquote>
            </el-radio>
          </template>
        </el-table-column>

        <el-table-column label="1" property="1"></el-table-column>
        <el-table-column label="2" property="2"></el-table-column>
        <el-table-column label="3" property="3"></el-table-column>
        <el-table-column label="4" property="4"></el-table-column>
        <el-table-column label="5" property="5"></el-table-column>
        <el-table-column label="6" property="6"></el-table-column>

      </el-table>
      <el-table v-if="type==2" :data.sync="data">
       ...和上面的表格差不多

      </el-table>
      <div>
        <el-button type="primary" @click.stop.prevent="sumit"> 确定 </el-button>
        <el-button @click="dialogVisible = false;"> 取消 </el-button>
      </div>

改进

结合单选表格的监听事件,在单选表格的行的时候选中该行的单选按钮,但不出意外的出问题了

改进的问题

虽然功能无异常,但是在关闭dialog的时候不知道为什么会调用一次行点击监听事件,控制台报错,因为没有值,单选按钮的监听事件是会传入行的数据的,但这次错误调用是没有的,而且下面还有根据数据进行的处理。我真的服了,但改用还是得用

改进问题解决

找了半天还是没找到为啥会在dialog关闭的时候调用table的单选行监听,不关闭啥事没有,一关闭就不知道哪里来的单选行方法的调用;最后只能用笨方法,在传入值后,关闭时将radio的值为null,判断radio是否为null, 是的话,不让他执行里面的操作,然后在打开dialog的时候将值设置为""空字符串,通过radio的值来判断是不发第一次调用。没招了,毁灭吧。

标签:ui,关闭,表格,element,单选,dialog,按钮,table,操作
From: https://www.cnblogs.com/piaohd/p/17685674.html

相关文章

  • 通过StarWindV2VConverter将VMWare的CentOS7虚拟机转换成Hyper-V产生所warning: /dev/
    1.在VMWare中将CentOS7虚拟机导出ovf,在StarWindV2VConverter中将其转换为VHDX2.在Hyper-V中新建虚拟机2.1在选择代数时要注意一定要选择“第一代”2.2在选择选择虚拟硬盘时,选择已转换好的VHDX文件3.启动Hyper-V中新建的虚拟机3.1出现了如下的问题-------------3.2处理方法在......
  • appium运行报错UiAutomator exited unexpectedly with code 0, signal null
    增加配置desired_caps['automationName']="UiAutomator2"再次运行后,正常 ......
  • locust:Python 分布式压力测试(带WebUI)
    Locust介绍它采用纯Python实现,是一个分布式用户负载测试的工具。使用基于Requests库的客户端发起请求,使编写脚本大大简化;在模拟并发方面摒弃进程和线程,完全基于时间驱动,采用协程(gevent)提供的非阻塞IO和coroutine来实现网络层的并发请求。因此单台压力机也能产生数......
  • 无法找到模块“element-plus/dist/locale/zh-cn.mjs”的声明文件
    VUE报错如下无法找到模块“element-plus/dist/locale/zh-cn.mjs”的声明文件。“e:/visualstudio_code/emppre/node_modules/element-plus/dist/locale/zh-cn.mjs”隐式拥有“any”类型。如果“element-plus”包实际公开了此模块,请尝试添加包含declaremodule‘element-plus/di......
  • 【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )
    文章目录一、NavigationUI类简介二、NavigationUI类使用流程1、创建Fragment2、创建NavigationGraph3、Activity导入NavHostFragment4、创建菜单5、Activity界面开发NavigationUI的主要逻辑(重点)a、添加Fragment布局b、处理Navigation导航逻辑(重点)c、启用菜......
  • Spring—Document root element "beans", must match DOCTYPE root "null"分析及解决
    Documentrootelement"beans",mustmatchDOCTYPEroot"null".的错误提示,网上很多人说要把applicationContex.xml文件中加上如下第二行的<!DOCTYPE/>标签,说明DTD,其实并不准确。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBL......
  • 【电子量产工具】4. UI系统
    @TOC前言最近看了电子量产工具这个项目,本专栏是对该项目的一个总结。一、UI界面分析UI是用户界面(UserInterface)的缩写,指的是人与计算机或其他设备进行交互时所使用的界面。用户界面是用户与系统之间的桥梁,提供了一种方式让用户与计算机进行沟通、操作和获取信息。用户界面可以......
  • buildroot 构建根文件系统(6)添加字体和中文支持
    一、开发背景构建最小系统后成功运行后,Qt程序在界面上文本不显示二、开发需求Qt库编译的程序可以正常运行三、开发环境LinuxUbuntu4.15.0-65-generic+buildroot-2023.02.3+i.mx6d(cortex-A9)四、实现步骤1、添加界面中文支持1)基于前面章......
  • element 修改表格样式
    修改elemetel-table奇偶行的表格样式<el-table:row-class-name="tableClass":data="msgList"style="width:100%"table-layout="auto"class="tableAuto">在el-table中加一个自定义的class名:row-class-name="tableClass"......
  • Stable Diffusion WebUI插件:StyleSelectorXL 之七十七种绘画风格任君选择
    本文给大家分享一个应用于SDXL的新插件:StyleSelectorXL。通过在UI界面上简单的选择,我们就可以生成多种多样的风格图片,如动漫、水彩、平面、3D、线稿、涂鸦、剪纸、朋克、童话等等。基本介绍用过SDXL的同学,应该能切身感受到其出图质量相比之前的SD1.5、2.x等版本都有了......