vue中使用elementUI的全选表格,点击全选,选中子表格的checkbox
效果图如下:

由于elementUI提供的表格没办法满足需求,我就在elementUI表格的基础上又做了一些改动
首先,全选的checkbox不是表格自带的,是自己加上去的,子表格中的checkbox也是自己加的,所以全选和单选的方法都要自己手动写,代码如下:
<el-table
class="father_table"
size="mini"
border
ref="multipleTable"
:data="tableData"
tooltip-effect="highLight"
style="width: 100%"
:default-sort="{prop: 'date', order: 'descending'}"
:span-method="arraySpanMethod"
default-expand-all
>
<el-table-column width="55">
<template slot="header">
<input type="checkbox" v-model="isCheckedAll" :checked="isCheckedAll" @change="handle_allCheckbox" class="input_check" />
<!-- <el-checkbox v-model="isCheckedAll" :checked="isCheckedAll"></el-checkbox> -->
</template>
<template>
<el-table-column type="expand">
<template slot-scope="props">
<el-table :ref="`childMultipleTable${props.$index}`" :show-header="showHeader" class="child_table" size="mini" :data="props.row.oldList">
<el-table-column width="48" class="checkbox_wrap">
<template slot-scope="checkProps">
<input
type="checkbox"
v-model="checkProps.row.isChecked"
:checked="checkProps.row.isChecked"
@change="handle_checkbox(checkProps.row)"
class="input_check"
/>
<!-- <el-checkbox v-model="isCheckedAll" :checked="isCheckedAll"></el-checkbox> -->
</template>
</el-table-column>
<el-table-column prop="name"></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" show-overflow-tooltip></el-table-column>
<el-table-column>
<template slot-scope="scope" v-if="checkedList.indexOf(scope.row.id) > -1">
<el-button size="mini" type="text" class="btnText_delete" @click="handle_delete(scope.row)">删除成员</el-button>
</template>
</el-table-column>
</el-table>
</template>
</el-table-column>
</template>
</el-table-column>
<el-table-column>
<template slot="header">姓名</template>
<template slot-scope="scope">
<span class="mr10">{{scope.row.name}}</span>
<span>{{scope.row.address}}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">年龄</template>
<!-- <template slot-scope="scope">{{scope.row.address}}</template> -->
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">住址</template>
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">联系方式</template>
</el-table-column>
<el-table-column show-overflow-tooltip>
<template slot="header">状态</template>
</el-table-column>
<el-table-column>
<template slot="header">操作</template>
<template slot-scope="scope">
<el-button size="mini" type="text" class="btnText_add" @click="handle_add(scope.row)">添加成员</el-button>
</template>
</el-table-column>
</el-table>
<div class="page_wrapper">
<p>显示第1条到第10条记录,总共{{pageTotal}}条记录</p>
<el-pagination background layout="prev, pager, next" :total="pageTotal" prev-text="上一页" next-text="下一页"></el-pagination>
</div>
watch: {
isCheckedAll: {
handler(newVal, oldVal) {
if (newVal == true) {
this.tableData.forEach((item, i) => {
item.oldList.forEach((it) => {
this.$refs[`childMultipleTable${i}`].toggleRowSelection(it);
});
});
} else if (newVal == false) {
this.tableData.forEach((item, i) => {
this.$refs[`childMultipleTable${i}`].clearSelection();
});
}
},
deep: true,
immediate: true,
},
dialogVisible: {
handler(newVal, oldVal) {
if (newVal == false) {
this.form.name = '';
this.form.age = '';
this.form.phone = '';
this.form.address = '';
}
},
deep: true,
immediate: true,
},
},
methods: {
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 1) {
return [1, 2];
} else if (columnIndex === 2) {
return [0, 0];
}
},
// 全选
handle_allCheckbox() {
this.isCheckedAll = this.isCheckedAll ? true : this.isCheckedAll == null ? true : false;
this.tableData.forEach((item, i) => {
item.oldList.forEach((it) => {
it.isChecked = !it.isChecked;
});
});
if (this.checkedList.length > 0) {
this.checkedList = [];
} else {
this.tableData.forEach((item, i) => {
item.oldList.forEach((it) => {
if (it.isChecked) {
this.checkedList.push(it.id);
}
});
});
}
console.log(this.checkedList, 'this.checkedList');
},
// 单选
handle_checkbox(row) {
let indexInchecked = this.checkedList.indexOf(row.id);
if (indexInchecked > -1) {
this.checkedList.splice(indexInchecked, 1);
} else {
this.checkedList.push(row.id);
}
console.log(this.checkedList, 'this.checkedList');
},
handle_delete(row) {},
handle_add(row) {
this.dialogVisible = true;
},
handle_submit() {
console.log('submit');
},
},
vue中使用elementUI的全选表格,点击全选,选中子表格的checkbox的更多相关文章
- Django day 33 vue中使用element-ui的使用,课程的相关介绍,vue绑定图片,课程列表接口,课程详情页面
一:vue中使用element-ui的使用, 二:课程的相关介绍, 三:vue绑定图片, 四:课程列表接口, 五:课程详情页面
- 在vue中使用ElementUI
完整引用ElementUI: 安装:在需要使用到的vue项目目录下,使用npm下载安装: npm/cnpm i element-ui -S/--save <!-- 引入样式 --> < ...
- vue中对element-ui框架中el-table的列的每一项数据进行操作
vue中使用element table,表格参数格式化formatter 后台返回对应的数字, 那肯定不能直接显示数字,这时候就要对 表格进行数据操作 如图: 代码: methods: { //状态改 ...
- js之全选即点击全选标签可选择全部复选框
目标效果:网页全选功能,即点击全选标签可选择全部复选框 实现代码如下 <!DOCTYPE html> <html lang="en"> <head&g ...
- layui表格点击排序按钮后,表格绑定事件失效解决方法
最近项目使用layui较为频繁,遇到了一个麻烦的问题,网上搜索也没有看到同类型的问题,故此记下来. 需求是点击上图右侧表格中某一个单元格,会触发点击事件如下代码: $("table>t ...
- 在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结
当我们在开发中遇到tab切换,这时候用el的el-tabs感觉很方便 但当我在把代码都写完后,发现一个问题就是页面打开时 虽然我们只能看见当前一个tab页,但是vue会帮你把你写的所有tab页的内容都 ...
- vue中使用elementUI中表格的v宽度,字体大小
<el-table :row-style="{height:'20px'}" :cell-style="{padding:'0px'}" style=&q ...
- vue中使用elementUI
引入Element 因为整个项目是依赖ElementUI框架做的,所以采用了全部引入 1,在项目根目录执行命令:npm i element-ui -S进行安装 2,在main.js中引入element ...
- 在vue中使用Element-UI
Element-UI是一套基于Vue2.0的UI组件库,http://element.eleme.io/#/zh-CN/component/carousel 首先npm install element ...
- vue中使用element-ui自定义主题后,vue-cli跑不起来了
环境:vue-cli 2.x版本 自己在官网配置了主题并放到了项目中https://element.eleme.cn/#/zh-CN/theme 然后,我的脚手架在我的电脑中休息了几天,就跑不通了呢! ...
随机推荐
- c程序设计语言 by K&R(一)一些c语言基础知识
出自<c程序设计语言> by K&R: 一.导言 二.类型.运算符与表达式 三.控制流 1. 字符输入与输出 getchar() 和 putchar(),输入一个字符.输出一个字符 ...
- SpringBoot 引入第三方 jar
SpringBoot 引入第三方 jar 项目结构 -BCJS |--lib |--hsm-talos-1.0.1.jar |--src |--pom.xml step1 : 配置第三方 jar 为依 ...
- 使用 `Roslyn` 分析器和修复器 对异步方法规范化返回Async结尾
之前写过一篇使用修复器帮助添加头部注释文本的功能,今天使用Roslyn的代码修复器对异步返回方法规范化的功能 实现分析器 首先需要实现分析器,使用RegisterSyntaxNodeAction,分析 ...
- 【赵渝强老师】Kafka的体系架构
一.什么是Kafka? 数据工程中最具挑战性的部分之一是如何从不同点收集和传输大量数据到分布式系统进行处理和分析.需要通过消息队列正确地分离大量数据,因为如果一部分数据无法传送,则可以在系统恢复时传输 ...
- Java使用snmp协议采集服务器信息
Java使用snmp协议采集服务器信息 一.snmp简介 SNMP是专门设计用于在 IP 网络管理网络节点(服务器.工作站.路由器.交换机及Hubs等)的一种标准协议,它是一种应用层协议. ...
- 15. 序列化模块json和pickle、os模块
1. 序列化模块 1.1 序列化与反序列化 (1)序列化 将原本的python数据类型字典.列表.元组 转换成json格式字符串的过程就叫序列化 (2)反序列化 将json格式字符串转换成python ...
- argmax经过sigmoid和不经过sigmoid区别
起因 今天和同组讨论了一下网络输出时,在torch.argmax之前经过torch.sigmoid和不经过sigmoid的区别. 主要起因是实验结果图像不同 图1 不经过sigmoid 图2 经过si ...
- 数据库周刊33丨腾讯Tbase新版本发布;“2020数据技术嘉年华”有奖话题遴选;阿里云技术面试题;APEX 实现数据库自动巡检;MYSQL OCP题库……
摘要:墨天轮数据库周刊第33期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.中国移动国产OLTP数据库中标公告:南大金仓阿里,万里开源中兴 分获大单[摘要]近日,中国 ...
- vue前端使用nexus配置npm私有仓库
当我们运行前端项目的时候,常常在解决依赖的时候会加上一个参数npm install --registry=https://registry.npm.taobao.org将源指定为淘宝的源,以期让速度加 ...
- vue 中 slot 的使用方式,以及作用域插槽的用法
分类:插槽又分为匿名插槽.具名插槽以及作用域插槽 : 匿名插槽,我们又可以叫它单个插槽或者默认插槽 因为组件标签中间是不允许写内容的,但是可以插入 插槽 :template 标签 : 插槽的使用方法 ...