文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue+elementUI怎么配置表格的列显示与隐藏

2023-06-30 02:01

关注

这篇文章主要介绍“vue+elementUI怎么配置表格的列显示与隐藏”,在日常操作中,相信很多人在vue+elementUI怎么配置表格的列显示与隐藏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue+elementUI怎么配置表格的列显示与隐藏”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

描述:

表格的列过多时,可以根据需要控制列的显示与隐藏,目前是采用Vue+elementUI(适配Vue3的Element Plus)实现的,具体效果与代码如下:

效果图:

vue+elementUI怎么配置表格的列显示与隐藏

完整代码:

<template>  <div id="app">    <el-table :data="tableData" border  ref="table">      <el-table-column        fixed        type="index"        align="center"        :index="1">        <template #header>          <el-popover            placement="bottom"            :width="600"            :visible="visible"          >            <!-- 配置列面板 -->            <transition name="fade">              <div>                <div>选择显示字段</div>                <div>                  <el-checkbox v-model="showColumn.date" disabled>日期</el-checkbox>                  <el-checkbox v-model="showColumn.name">姓名</el-checkbox>                  <el-checkbox v-model="showColumn.provinces">省份</el-checkbox>                  <el-checkbox v-model="showColumn.city">市区</el-checkbox>                  <el-checkbox v-model="showColumn.adreess">地址</el-checkbox>                  <el-checkbox v-model="showColumn.zipCode">邮编</el-checkbox>                </div>              </div>            </transition>            <div >              <el-button size="mini" type="text" @click="visible = false">取消</el-button>              <el-button size="mini" type="primary" plain @click="saveColumn">确定</el-button>            </div>            <template #reference>              <i                class="el-icon-setting"                                @click="visible = true"              ></i>            </template>          </el-popover>        </template>      </el-table-column>      <el-table-column        prop="date"        label="日期"        width="150"        v-if="showColumn.date"      >      </el-table-column>      <el-table-column        prop="name"        label="姓名"        width="120"        v-if="showColumn.name"      >      </el-table-column>      <el-table-column        prop="province"        label="省份"        width="120"        v-if="showColumn.provinces"      >      </el-table-column>      <el-table-column        prop="city"        label="市区"        width="120"        v-if="showColumn.city"      >      </el-table-column>      <el-table-column        prop="address"        label="地址"        minWidth="300"        v-if="showColumn.adreess"      >      </el-table-column>      <el-table-column        prop="zip"        label="邮编"        width="120"        v-if="showColumn.zipCode"      >      </el-table-column>      <el-table-column label="操作" fixed="right" width="100" align="center">        <template #default="scope">          <el-button @click="handleClick(scope.row)" type="text" size="small"            >查看</el-button          >          <el-button type="text" size="small">编辑</el-button>        </template>      </el-table-column>    </el-table>  </div></template><script>export default {  data() {    return {      visible: false,      tableData: [        {          date: "2016-05-02",          name: "王小虎",          province: "上海",          city: "普陀区",          address: "上海市普陀区金沙江路 1518 弄",          zip: 200333,        },        {          date: "2016-05-04",          name: "王小虎",          province: "上海",          city: "普陀区",          address: "上海市普陀区金沙江路 1517 弄",          zip: 200333,        },        {          date: "2016-05-01",          name: "王小虎",          province: "上海",          city: "普陀区",          address: "上海市普陀区金沙江路 1519 弄",          zip: 200333,        },        {          date: "2016-05-03",          name: "王小虎",          province: "上海",          city: "普陀区",          address: "上海市普陀区金沙江路 1516 弄",          zip: 200333,        },      ],      // 列的配置化对象,存储配置信息      showColumn: {        date: true,        name: true,        provinces: true,        city: true,        adreess: true,        zipCode: true,      },    };  },  mounted() {    // 发请求得到showColumnInitData的列的名字    if(localStorage.getItem("columnSet")){      this.showColumn = JSON.parse(localStorage.getItem("columnSet"))    }else{      this.showColumn = {        date: true,        name: true,        provinces: true,        city: true,        adreess: true,        zipCode: true,      };    }  },  methods: {    handleClick(row) {      console.log(row);    },    saveColumn() {      localStorage.setItem("columnSet",JSON.stringify(this.showColumn))      this.visible = false;    },  },};</script><style lang="postcss" scoped>.fade-enter-active,.fade-leave-active {  transition: opacity 0.3s;}.fade-enter,.fade-leave-to {  opacity: 0;}</style>

问题:

可以简单实现,但最好的方法是列的全部字段也通过配置实现;

elementUI的popover嵌套在table里使用时,会出现面板的显示bug,例如本文是采用:visible=“visible”,如果按照正常双向绑定v-model:visible=“visible”,则会出现弹窗闪现的现象,弹出后会立马关闭;

现象:

vue+elementUI怎么配置表格的列显示与隐藏

原因猜想:

v-model:visible=“visible”,会自动触发遮罩层关闭,置visible变为false(watch监听visible,点击弹出按钮时,visible变为true后会立马变为false);

如果某一列设置minWidth属性,如果隐藏该列,则popover会出现弹出两个窗口的异常现象,例如“地址”列:

vue+elementUI怎么配置表格的列显示与隐藏

故可采用dialog来实现:

<template>  <div id="app">    <el-table :data="tableData" border  ref="table">      <el-table-column        fixed        type="index"        align="center"        :index="1">        <template #header>          <i            class="el-icon-setting"                        @click="visible = true"          ></i>        </template>      </el-table-column>      <el-table-column        prop="date"        label="日期"        width="150"        v-if="showColumn.date"      >      </el-table-column>      <el-table-column        prop="name"        label="姓名"        width="120"        v-if="showColumn.name"      >      </el-table-column>      <el-table-column        prop="province"        label="省份"        width="120"        v-if="showColumn.provinces"      >      </el-table-column>      <el-table-column        prop="city"        label="市区"        width="120"        v-if="showColumn.city"      >      </el-table-column>      <el-table-column        prop="address"        label="地址"        minWidth="300"        v-if="showColumn.adreess"      >      </el-table-column>      <el-table-column        prop="zip"        label="邮编"        width="120"        v-if="showColumn.zipCode"      >      </el-table-column>      <el-table-column label="操作" fixed="right" width="100" align="center">        <template #default="scope">          <el-button @click="handleClick(scope.row)" type="text" size="small"            >查看</el-button          >          <el-button type="text" size="small">编辑</el-button>        </template>      </el-table-column>    </el-table>    <el-dialog title="字段配置" v-model="visible">      <transition name="fade">        <div>          <div>选择显示字段</div>          <div>            <el-checkbox v-model="showColumn.date" disabled>日期</el-checkbox>            <el-checkbox v-model="showColumn.name">姓名</el-checkbox>            <el-checkbox v-model="showColumn.provinces">省份</el-checkbox>            <el-checkbox v-model="showColumn.city">市区</el-checkbox>            <el-checkbox v-model="showColumn.adreess">地址</el-checkbox>            <el-checkbox v-model="showColumn.zipCode">邮编</el-checkbox>          </div>        </div>      </transition>      <template #footer>        <span class="dialog-footer">          <el-button @click="visible = false">取 消</el-button>          <el-button type="primary" @click="saveColumn">确 定</el-button>        </span>      </template>    </el-dialog>  </div></template>

效果:

vue+elementUI怎么配置表格的列显示与隐藏

到此,关于“vue+elementUI怎么配置表格的列显示与隐藏”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯