vue+elementui實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示和隱藏
vue+elementui(table,多選框)實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示和隱藏,供大家參考,具體內(nèi)容如下
imdex.vue
<template> ? <div> ? ? <div> ? ? ? <el-table :data="tableData" border style="width: 100%" ref="table"> ? ? ? ? <el-table-column prop="index" label="序號(hào)" width="150"> ? ? ? ? ? <template slot-scope="scope"> ? ? ? ? ? ? <div>{{ scope.$index + 1 }}</div> ? ? ? ? ? </template> ? ? ? ? </el-table-column> ? ? ? ? <el-table-column ? ? ? ? ? v-for="(item, index) in againRender" ? ? ? ? ? :width="item.width" ? ? ? ? ? :prop="item.prop" ? ? ? ? ? :key="index" ? ? ? ? ? show-overflow-tooltip ? ? ? ? ? :label="item.label" ? ? ? ? ></el-table-column> ? ? ? </el-table> ? ? </div> ? ? <div class="dsadas"> ? ? ? <new-checkbox :all-item-data="itemList" :change-props="changeProps" /> ? ? </div> ? </div> </template> <script> import axios from "axios"; // 采用異步加載,防止父組件引入子組件,子組件的的鉤子函數(shù)全部執(zhí)行完畢 const newCheckbox = () => ({? ? component: import("./checkBox.vue"), ? delay: 2000, ? timeout: 2000, }); export default { ? data() { ? ? return { ? ? ? tableData: [], ? ? ? againRender: [], ? ? ? itemList: [ ? ? ? ? { ? ? ? ? ? allListDate: [ ? ? ? ? ? ? // 后臺(tái)數(shù)據(jù)結(jié)構(gòu)跟這有一樣 ? ? ? ? ? ? { label: "姓名", width: "120", prop: "name" }, ? ? ? ? ? ? { label: "性別", width: "120", prop: "sex" }, ? ? ? ? ? ? { prop: "age", label: "年齡", width: "120" }, ? ? ? ? ? ? { prop: "styChild", label: "身份", width: "120" }, ? ? ? ? ? ? { prop: "gradeClass", label: "學(xué)歷", width: "200" }, ? ? ? ? ? ], ? ? ? ? ? selectedList: [ ? ? ? ? ? ? { label: "姓名", width: "120", prop: "name" }, ? ? ? ? ? ? { label: "性別", width: "120", prop: "sex" }, ? ? ? ? ? ? { prop: "age", label: "年齡", width: "120" }, ? ? ? ? ? ], ? ? ? ? }, ? ? ? ], ? ? }; ? }, ? components: { newCheckbox }, ? mounted() { ? ? this.getElementVauleHieen(); ? }, ? methods: { ? ? changeProps(value) { ? ? ? this.$nextTick((_) => { ? ? ? ? this.againRender= value; ? ? ? ? this.$refs.table.doLayout; ? ? ? }); ? ? }, ? ? getElementVauleHieen() { ? ? ? axios.get("http://localhost:3000/elementVauleHieen").then((res) => { ? ? ? ? this.tableData = res.data; ? ? ? }); ? ? }, ? }, }; </script> <style lang="less"> </style>
checkBox.vue文件
<template> ? <div> ? ? <div> ? ? ? <el-checkbox ? ? ? ? :indeterminate="isIndeterminate" ? ? ? ? v-model="checkAll" ? ? ? ? @change="handleCheckAllChange" ? ? ? ? >全選</el-checkbox ? ? ? > ? ? </div> ? ? <el-checkbox-group ? ? ? v-model="checkedCities" ? ? ? @change="handleCheckedCitiesChange" ? ? > ? ? ? <el-checkbox ? ? ? ? v-for="(item, index) in allItemDataChecked" ? ? ? ? :label="item.label" ? ? ? ? :key="index" ? ? ? ? @change="(val) => checkboxChange(val, item, index)" ? ? ? ? >{{ item.label }}</el-checkbox ? ? ? > ? ? </el-checkbox-group> ? </div> </template> <script> export default { ? name: "checkBox", ? data() { ? ? return { ? ? ? isIndeterminate: false, ? ? ? checkAll: false, ? ? ? checkedCities: [], ? ? ? allItemDataChecked: this.allItemData[0].allListDate, ? ? ? checkboxChangeList: [], ? ? }; ? }, ? props: { ? ? allItemData: { ? ? ? type: Array, ? ? ? default: () => [], ? ? }, ? ? changeProps: { ? ? ? type: Function, ? ? ? default: () => false, ? ? }, ? }, ? mounted() { ? ? let list = []; ? ? if (this.allItemDataChecked.length) { ? ? ? this.allItemDataChecked.forEach((element) => { ? ? ? ? this.allItemData[0].selectedList.forEach((item) => { ? ? ? ? ? if (element.prop === item.prop && element.label === item.label) { ? ? ? ? ? ? list.push(item.label); ? ? ? ? ? } ? ? ? ? }); ? ? ? }); ? ? ? this.checkedCities = list; ? ? } ? }, ? watch: { ? ? checkedCities(newVlaue) { ? ? ? this.checkboxChangeList = []; // 防止多次點(diǎn)擊重復(fù)觸發(fā)數(shù)據(jù) ? ? ? if (newVlaue.length === 0) { ? ? ? ? this.changeProps([]); ? ? ? } else { ? ? ? ? this.allItemDataChecked.forEach((ele) => { ? ? ? ? ? newVlaue.forEach((item) => { ? ? ? ? ? ? if (ele.label === item) { ? ? ? ? ? ? ? this.checkboxChangeList.push(ele); ? ? ? ? ? ? ? this.checkboxChange(); ? ? ? ? ? ? } ? ? ? ? ? }); ? ? ? ? }); ? ? ? } ? ? }, ? }, ? methods: { ? ? handleCheckAllChange(val) { ? ? ? this.checkedCities = []; ? ? ? let result = []; ? ? ? this.checkedCities = val ? ? ? ? ? this.allItemDataChecked.forEach((element) => { ? ? ? ? ? ? result.push(element.label); ? ? ? ? ? }) ? ? ? ? : []; ? ? ? this.checkedCities = result; ? ? }, ? ? handleCheckedCitiesChange(value) { ? ? ? this.checkAll = value.length === this.allItemDataChecked.length; ? ? }, ? ? checkboxChange() { // 發(fā)現(xiàn)這個(gè)沒(méi)用 ? ? ? this.changeProps(this.checkboxChangeList); ? ? }, ? }, }; </script> <style lang="less"> </style>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue動(dòng)態(tài)組件和keep-alive組件實(shí)例詳解
動(dòng)態(tài)組件指的是動(dòng)態(tài)切換組件的顯示與隱藏,下面這篇文章主要給大家介紹了關(guān)于Vue動(dòng)態(tài)組件和keep-alive組件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Vue3實(shí)現(xiàn)provide/inject的示例詳解
Vue3 的 Provide / Inject 的實(shí)現(xiàn)原理其實(shí)就是巧妙利用了原型和原型鏈來(lái)實(shí)現(xiàn)的。本文將通過(guò)示例為大家介紹下provide/inject的具體實(shí)現(xiàn),需要的可以參考一下2022-11-11Vue數(shù)據(jù)監(jiān)聽(tīng)器watch和watchEffect的使用
今天我們來(lái)學(xué)習(xí)一下watch監(jiān)聽(tīng)器和它的好兄弟watchEffect監(jiān)聽(tīng)器。這個(gè)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,用的不是很多,當(dāng)然了,根據(jù)自己的項(xiàng)目情況自行決定使用,希望對(duì)大家有所幫助2023-02-02Vue infinite update loop的問(wèn)題解決
這篇文章主要介紹了Vue "...infinite update loop..."的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04vue基于Teleport實(shí)現(xiàn)Modal組件
Teleport 提供了一種干凈的方法,允許我們控制在 DOM 中哪個(gè)父節(jié)點(diǎn)下渲染了 HTML,而不必求助于全局狀態(tài)或?qū)⑵洳鸱譃閮蓚€(gè)組件。2021-05-05Vue數(shù)據(jù)更新頁(yè)面卻沒(méi)有更新的幾種情況以及解決方法
我們?cè)陂_(kāi)發(fā)過(guò)程中會(huì)碰到數(shù)據(jù)更新,但是頁(yè)面卻沒(méi)有更新的情況,下面這篇文章主要給大家介紹了關(guān)于Vue數(shù)據(jù)更新頁(yè)面卻沒(méi)有更新的幾種情況以及解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06easycom模式開(kāi)發(fā)UNI-APP組件調(diào)用必須掌握的實(shí)用技巧
uni-app基于VUE開(kāi)發(fā),通常組件的使用都是先安裝,然后全局或者局部引入,注冊(cè),今天通過(guò)本文給大家分享easycom模式開(kāi)發(fā)UNI-APP組件調(diào)用必須掌握的實(shí)用技巧,需要的朋友一起看看吧2021-08-08