当前位置: 首页 > 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.lryc.cn/news/622675.html

相关文章:

  • 从希格斯玻色子到 QPU:C++ 的跨维度征服
  • KingbaseES高可用架构深度解析——从读写分离到异地灾备的全方位守护
  • 【C++】异常详解(万字解读)
  • 力扣hot100 | 矩阵 | 73. 矩阵置零、54. 螺旋矩阵、48. 旋转图像、240. 搜索二维矩阵 II
  • [1Prompt1Story] 生成行为控制器 | 语义向量重加权(SVR)
  • 第七十五章:AI的“思维操控师”:Prompt变动对潜在空间(Latent Space)的影响可视化——看懂AI的“微言大义”!
  • Netty 的 Select/Poll 机制核心实现主要在 NioEventLoop 的事件循环
  • Horse3D游戏引擎研发笔记(六):在QtOpenGL环境下,仿Unity的材质管理Shader绘制四边形
  • Nginx域名和IP兼容双方的API地址
  • JavaScript forEach() 与 for 循环 return 行为全解析
  • 1083. 数列极差问题
  • 2025暑期—10ROS系统实现-计算图
  • Linux sar命令详细使用指南
  • 【CV 目标检测】Fast RCNN模型①——与R-CNN区别
  • 【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-用户管理
  • 基于Python的课程作业管理系统 Python+Django+Vue.js
  • .net印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统
  • 《Python 单例模式(Singleton)深度解析:从实现技巧到争议与最佳实践》
  • pytest tmpdir fixture介绍(tmpdir_factory)(自动在测试开始前创建一个临时目录,并在测试结束后删除该目录)
  • C#单元测试(xUnit + Moq + coverlet.collector)
  • STM32 软件I2C读写MPU6050
  • 云服务平台主流架构的相关知识体系剖析
  • 完整设计 之 智能合约系统:主题约定、代理协议和智能合约 (临时命名)----PromptPilot (助手)答问之2
  • 智能合约:区块链时代的“数字契约革命”
  • C++ STL-string类底层实现
  • 《WebPages 数据库:构建高效网络信息管理平台的关键技术解析》
  • RK3568 NPU RKNN(四):RKNN-ToolKit2性能和内存评估
  • Vue3从入门到精通:5.2 Vue3构建工具与性能优化深度解析
  • 微软Wasm学习-创建一个最简单的c#WebAssembly测试工程