美文网首页
vue简易表格全选

vue简易表格全选

作者: Denny_coder | 来源:发表于2017-12-14 17:01 被阅读0次

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

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

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

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

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

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

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

你以为就这就完了?? get-post-6.jpg

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

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

下面上代码:

Vue.component('check-all', {
    template: '<input type="checkbox" @click="checkall()" />',
    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: '<input type="checkbox" @click="checkitem()" />',
    // 技术上 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)
      },
    }
  })

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

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

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

本人原创 如需转载请注明出处 http://bestzhengke.com/2017/12/14/vue%E7%AE%80%E6%98%93%E8%A1%A8%E6%A0%BC%E5%85%A8%E9%80%89/#more

相关文章

  • vue简易表格全选

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

  • 三线表格的制作

    1.全选表格,依次单击【表格工具—设计】—【边框】—【无框线】。 2.全选表格,依次单击【表格工具—设计】—【边框...

  • 表格相关

    §1 表格的选择 Librer Office中表格的选择不像MS office那样,表格全选即可。在Libre ...

  • 表格中的全选、全不选、反勾

    表格中的全选、全不选、反勾

  • 干货 | Excel表格中Ctrl+字母快捷键汇总

    Excel表格中Ctrl+字母快捷键汇总 。 1、Ctrl + A 全选表格 2、Ctrl + B 粗体...

  • VUE全选

    效果如下: 代码如下:

  • 表格的常见问题(上)

    1.表格太宽,看不到左右边框 首先单击表格左上角的选择按钮全选表格,然后依次单击【表格工具—布局】—【自动调整】—...

  • 文字快速转换为表格

    将数据用空格隔开,并全选数据; 然后在“插入”中点击“表格”,找到---将文本转化成表格; 表格就已经生成啦。

  • react项目中遇到的坑

    table表格checkbox全选 模态框中嵌入表格并且设置了rowselection属性,默认设置,未清算的数据...

  • 文本与表格

    一、文本转表格 1.全选数据,依次单击【插入】—【表格】—【文本转换成表格】。 2.在【将文字转换成表格】对话框中...

网友评论

      本文标题:vue简易表格全选

      本文链接:https://www.haomeiwen.com/subject/enikwxtx.html