Vue实战(二):控制列的显示

该篇文章介绍了一个Vue应用中如何实现控制表格列的显示。通过使用ElementUI的el-table组件,结合v-if指令和数据对象动态控制列的显示状态。用户可以通过点击触发的popover选择要显示的列,选择项的变化会更新到colData数组,进而影响表格列的显示。
摘要由CSDN通过智能技术生成

Vue实战(二):控制列的显示

一、背景

在显示数据的过程中,如果出现了列过多的情况,这是就需要控制列的显示。

二、实现过程

1、布局

<template>
  <div>
    <el-row>
      <el-col :span="24">
        <span style="text-align: center">实现列显示配置</span>
      </el-col>
    </el-row>
    <hr />
    <el-row>
      <el-col :span="24">
        <el-popover title="勾选要显示的列" trigger="click" width="540">
          <el-checkbox-group v-model="checkedCol" size="mini" plain>
            <el-checkbox
              class="el-checkbox-width"
              v-for="(item, index) in checkGroup"
              :key="index"
              :label="item"
              :value="item"
            ></el-checkbox>
          </el-checkbox-group>
          <el-button slot="reference" type="success" size="mini"
            >列显示配置</el-button
          >
        </el-popover>
      </el-col>
    </el-row>
    <el-row>
      <el-col :span="24">
        <el-table border :data="dataList">
          <el-table-column label="ID" prop="id"></el-table-column>
          <el-table-column label="姓名" prop="name"></el-table-column>
          <el-table-column
            label="年龄"
            prop="age"
            v-if="colData[0].isTrue"
          ></el-table-column>
          <el-table-column
            label="性别"
            prop="sex"
            v-if="colData[1].isTrue"
          ></el-table-column>
          <el-table-column
            label="班级名称"
            prop="className"
            v-if="colData[2].isTrue"
          ></el-table-column>
          <el-table-column
            label="电话号码"
            prop="phone"
            v-if="colData[3].isTrue"
          ></el-table-column>
        </el-table>
      </el-col>
    </el-row>
  </div>
</template>

2、数据初始化

data() {
    return {
      colData: [
        { label: "年龄", isTrue: false },
        { label: "性别", isTrue: false },
        { label: "班级名称", isTrue: false },
        { label: "电话号码", isTrue: false },
      ],
      checkGroup: ["年龄", "性别", "班级名称", "电话号码"],
      checkedCol: [],
      dataList: [
        {
          id: "1",
          name: "张三",
          age: "18",
          sex: "男",
          className: "1班",
          phone: "123456",
        },
      ],
    };
  },

3、对checkedCol属性实现监听

watch: {
    //监听选择列
    checkedCol(val) {
      let arr = this.checkGroup.filter((i) => !val.includes(i));
      this.colData.filter((i) => {
        if (arr.indexOf(i.label) != -1) {
          i.isTrue = false;
        } else {
          i.isTrue = true;
        }
      });
    },
  },

三、效果展示

初始列显示:
在这里插入图片描述
列显示配置:
在这里插入图片描述
最后效果展示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值