当前位置: 首页 > news >正文

vue3动态的控制表格列的展示简单例子

动态的控制表格列的展示,

  • 可以勾选和取消某一列的显示
  • 本地存储上一次的配置
  • 表格内容支持通过slot自定义内容
    在这里插入图片描述

例子1

<script setup>
import { reactive, ref, watch } from "vue";
import one from "./components/one.vue";
import One from "./components/one.vue";
const tableData = [{id: 1,age: "2016-05-03",name: "Tom",address: "No. 189, Grove St, Los Angeles",},{id: 2,age: "2016-05-02",name: "Tom",address: "No. 189, Grove St, Los Angeles",},{id: 3,age: "2016-05-04",name: "Tom",address: "No. 189, Grove St, Los Angeles",},{id: 4,age: "2016-05-01",name: "Tom",address: "No. 189, Grove St, Los Angeles",},
];const config = {name: {label: "name",prop: "name",canHidde: false,},age: {label: "age",prop: "age",canHidde: false,},address: {label: "address",prop: "address",canHidde: false,redner: One,},id: {label: "id",prop: "id",canHidde: true,},
};let state = reactive({});
if (localStorage.getItem("state")) {//JDON.parse()解析时可能会出现解析错误的情况,要使用try catch包裹try {// reactive不能直接复制整个对个,可以重新复制reactivestate = reactive(JSON.parse(localStorage.getItem("state")));} catch (e) {console.log(e);}
} else {Object.keys(config).forEach((key) => {state[key] = true;});
}
const setState = (state) => {localStorage.setItem("state", JSON.stringify(state));
};watch(state, (val) => {setState(val);
});
</script><template><div><div v-for="item in Object.keys(state)"><div><span>{{ config[item].label }}</span><el-checkboxv-model="state[item]":disabled="config[item].canHidde"></el-checkbox></div></div><el-table :data="tableData" style="width: 100%"><template v-for="item in Object.keys(state)" :key="item"><!---v-bind可以快速绑定多个变量--><el-table-column v-bind="config[item]" v-if="state[item]"><template #header><div><span>{{ config[item].label }}</span><el-checkboxv-model="state[item]":disabled="config[item].canHidde"></el-checkbox></div></template><template v-if="config[item].redner" #default="scoped"><component :is="config[item]?.redner" :scoped="scoped"></component></template></el-table-column></template></el-table></div>
</template><style scoped></style>

例子2 ,插槽使用 h函数渲染

  • 模板中的插值语法 {{ }} 的作用是:把表达式的值转换成字符串,插入到 HTML 中。

  • h() 返回一个 VNode 对象, 让 Vue 把一个 VNode 对象 转成字符串。Vue 内部会尝试 JSON.stringify(vnode),但 VNode 对象中包含循环引用(如 vnode.component.vnode 指回自己),所以就会报错:
    在这里插入图片描述

  • <component :is="..."> 不仅可以切换组件,还可以直接渲染 VNode

<script setup>
import { reactive, ref, watch, h } from "vue";
const config = {name: {label: "name",prop: "name",canHidde: false,},age: {label: "age",prop: "age",canHidde: false,},address: {label: "address",prop: "address",canHidde: false,render: (scoped) => {return h("div",{style: {color: "red",},},scoped.row.address);},},id: {label: "id",prop: "id",canHidde: true,},
};
</script><template><div><el-table :data="tableData" style="width: 100%"><template v-for="item in Object.keys(state)" :key="item"><el-table-column v-bind="config[item]" v-if="state[item]"><template #header><div><span>{{ config[item].label }}</span><el-checkboxv-model="state[item]":disabled="config[item].canHidde"></el-checkbox></div></template><template v-if="config[item].render" #default="scoped"><!--{{config[item].render(scoped)}}直接这样使用会报错-->    <component :is="config[item].render(scoped)" /></template></el-table-column></template></el-table></div>
</template>

在这里插入图片描述

http://www.dtcms.com/a/334953.html

相关文章:

  • Python延申内容(一)
  • GDB实战教学
  • LakeHouse--湖仓一体架构
  • 基于C++的词法分析器:使用正则表达式的实现
  • 【OpenGL】LearnOpenGL学习笔记10 - 平行光、点光源、聚光灯
  • Spring Cloud系列—Alibaba Seata分布式事务
  • Linux 文件删除后,df -h磁盘空间未更新
  • 安卓四大组件基础题
  • GPIO初始化及调用
  • Go语言指针与内存分配深度解析:从指针本质到 new、make 的底层实现
  • Spring三级缓存
  • 深入理解 Linux 线程:从概念到虚拟地址空间的全面解析
  • 机器学习的特征工程(特征构造、特征选择、特征转换和特征提取)详解
  • 028 动静态库 —— 动态库
  • 第3问 什么是数据指标?
  • 41 C++ STL模板库10-容器3-list
  • MATLAB R2010b系统环境(一)MATLAB简介
  • 云原生俱乐部-RH124知识点总结(3)
  • Dify实战应用指南(上传需求稿生成测试用例)
  • C/C++中的内存分区
  • Java8~Java21重要新特性
  • sharding-jdbc读写分离配置
  • “preinstall“: “npx only-allow pnpm“
  • C#多线程并发安全队列ConcurrentQueue
  • 防火墙虚拟系统配置实验
  • 自然语言处理——02 文本预处理(上)
  • B*算法深度解析:动态避障路径规划的革命性方法
  • AI安全增强核心技术:提示词防火墙、置信度过滤与知识蒸馏防御
  • 2-3〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸AppScan(WEB扫描)
  • XC6SLX45T-2FGG484C Xilinx AMD Spartan-6 FPGA