博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue简易表格全选
阅读量:6483 次
发布时间:2019-06-23

本文共 2390 字,大约阅读时间需要 7 分钟。

最近以为公司业务需要不让用我最爱的elementUI了,刚开始感觉没啥,后来真到开始写了,真的就懵逼,组件不让用啥都得自己写了。。

最常用表格全选都都变成了一个坎。

对于表格全选,我们一定能想到就是判断表格的个数和表格选中的个数相比较,相等全选按钮就处于选中状态,不等就不选中,可是这又不是jQuery,选择器又不能用。对于刚接触vue半年而且大部分时间都在用饿了么组件的我真的是不知所措。

搜了很多资料,看到很多解决方案都是要在数据中加入checked状态,我是拒绝的,就算我愿意后台哥哥也不愿意啊,这不是脏数据嘛!

而且还不是组件式的,谁想用都得copy一大坨代码,我相信我们组长是拒绝的。感觉好难哦。。。

但是问题还是要解决,饭还是要吃的。

回家的想了想,看了看vue的官网,灵感就来了,很快就把解决了。

你以为就这就完了??

get-post-6.jpg

全选反选只是checkbox选中,我们的选中是为了获取数据啊,不然选它干啥!

刚开始想为每行的checkbox的click事件传值,后来具体操作发现这是有bug的。然后又各种尝试最后解决了问题。

下面上代码:

Vue.component('check-all', {    template: '',    props: {      // 必须为string类型      data: {        type: String,      },    },    methods: {      checkall: function() {        var data = this.data?this.data:"list";        var row = this.$root.$refs[data].rows;        var arr = [];        var sels = [];        for (var i = 1; i < row.length; i++) {          if (row[i].children[0].children[0].checked) {            arr.push(row[i].children[0].children[0].checked);          };        };        if (arr.length === row.length - 1) {          for (var i = 1; i < row.length; i++) {              row[i].children[0].children[0].checked = false;          }        } else {          for (var i = 1; i < row.length; i++) {            row[i].children[0].children[0].checked = true;            sels.push(this.$root[data][row[i - 1].rowIndex]);          }        }        this.$emit('ymhy-select-all', sels)      }    }  })
Vue.component('check-item', {    template: '',    // 技术上 data 的确是一个函数了,因此 Vue 不会警告,    // 但是我们却给每个组件实例返回了同一个对象的引用    props: {      // 数组/对象的默认值应当由一个工厂函数返回      data: {        type: String,      },    },    data: function() {      return {}    },    methods: {      checkitem: function() {        var data = this.data ? this.data : "list";        var row = this.$root.$refs[data].rows;        var arr = [];        var sels = [];        for (var i = 1; i < row.length; i++) {          if (row[i].children[0].children[0].checked) {            arr.push(row[i].children[0].children[0].checked);            sels.push(this.$root[data][row[i - 1].rowIndex]);          };        }           if (arr.length === row.length - 1) {          row[0].children[0].children[0].checked = true;        } else {          row[0].children[0].children[0].checked = false;        }        this.$emit('ymhy-select-item', sels)      },    }  })

想自己动手尝试的同学可以点击

这是的实现方法,如果大家还有更好的方式,还请赐教,

代码拙劣,如有错误,望指出。 > 本人原创 如需转载请注明出处

本人原创 如需转载请注明出处
你可能感兴趣的文章
UITableViewCell分割线不是左对齐的问题
查看>>
CentOS7 编译安装PHP7
查看>>
MySQL常见错误代码及代码说明
查看>>
Cglib动态代理基础使用
查看>>
技术人员,为什么会苦逼
查看>>
使用126邮箱发送邮件的python脚本
查看>>
Maven
查看>>
缓存系统在游戏业务中的特异性
查看>>
redis的基本数据类型
查看>>
.NET 同步与异步之锁(Lock、Monitor)(七)
查看>>
前端大牛们都学过哪些?
查看>>
在iOS当中发送电子邮件和短信
查看>>
13~1003的和
查看>>
pycharm如何新项目如何不默认创建虚拟环境(吐槽)
查看>>
Loadrunner检查点小结(很经典)
查看>>
MySQL字段类型详解
查看>>
ORACLE 的游标
查看>>
虚拟机安装的UBUNTU全屏的方法:
查看>>
java虚拟机类加载器
查看>>
ASP.NET状态管理之八(会话Session)
查看>>