vue.js怎么调用全选功能 - 网站

vue.js怎么调用全选功能

分类:Vue.js 答疑 - 常见问题 · 发布时间:2020-11-29 13:04 · 阅读:1606

本文环境:windows7、vue2.9.6,该方法适用于所有品牌的电脑。

vue.js调用全选功能的方法:

1、从服务器拿到数据,为每个item设置checked属性

2、计算选中的数量selectCount,如果选中的数量与selectItems的数量相等,则全选selectAll选中

3、点全选时,将每个item的checked属性置为true,反选时置为false,

4、每次selectItems的属性发生变化时,都将checked的为true的item放入数组checkedGroups

下面为实现代码:

//全选
data: function() {
 return {
  selectItems: [], // 从服务器拿到的数据
 }
},
computed: {
 // 全选checkbox绑定的model
 selectAll: {
  get: function() {
   return this.selectCount == this.selectItems.length;
  },
  set: function(value) {
   this.selectItems.forEach(function(item) {
    item.checked = value;
   });
   return value;
  }
 },
 //选中的数量
 selectCount: {
  get: function() {
   var i = 0;
   this.selectItems.forEach(function(item) {
    if (item.checked) {
     i++;
    }
   });
   return i;
  }
 },
 //选中的数组
 checkedGroups: {
  get: function() {
   var checkedGroups = [];
   this.selectItems.forEach(function(item) {
    if (item.checked) {
     checkedGroups.push(item);
    }
   });
   return checkedGroups;
  }
 }
}

这种方法用起来不太方便,首先是很难复用,每次要用到的时候都需要写一次computed,其次是selectAll、checkedGroups、selectItems都已经固定,不太灵活。

所以在这次项目中,我用vue的指令重新实现了全选的功能,directive的思路其实跟computed差不多,先上代码:

export default {
 'check-all': {
  twoWay: true,
  params: ['checkData'],
  bind() {
   /**
    - 如果所有的列表的checked属性都为true,则选中全选框,否则不选中全选框
    */
   this.vm.$watch(this.params.checkData, (checkData) => {
    if (checkData.every((item) => item.checked)) {
     this.set(true);
    } else {
     this.set(false);
    }
   }, { deep: true });
  },
  // checkAll发生更改时
  update(checkAll) {
   /**
    - 如果全选框被选中,则将列表的所有checked属性转为true,否则转为false
    */
   if (checkAll) {
    this.vm[this.params.checkData].forEach((item) => {
     item.checked = true;
    });
   } else {
    this.vm[this.params.checkData].forEach((item) => {
     item.checked = false;
    });
   }
  },
 },
};

调用:

<input type="checkbox" v-model="checkAll" v-check-all="checkAll" check-data="checkData">
  <ul>
   <li v-for="item in checkData">
    <input type="checkbox" v-model="item.checked">
    {{item.text}}
   </li>
  </ul>
标签:
vue.js 全选

相关文章

vue父子组件生命周期执行顺序是什么

执行顺序:父组件先创建,然后子组件创建;子组件先挂载,然后父组件挂载,即“父beforeCreate-&gt; 父create -&gt; 子beforeCreate-&gt; 子created -&gt; 子mounted -&gt; 父mounted”。

js原型和原型链是什么

js原型和原型链是:1、原型是一个可以被复制的一个类,通过复制原型可以创建一个一模一样的新对象;2、原型链是原型对象创建过程的历史记录,当访问一个对象的某个属性时,会先在这个对象本身属性上查找。

vue3.0有哪些新特性

vue3.0新特性有:1、性能比vue2.x更快;2、支持按需编译、体积更小;3、组合API,类似React Hooks;4、暴露了自定义渲染API;5、新增三个组件;6、更好地支持TS。

vue.js路由有什么用?

vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面切换和跳转的;而在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。

vue.js能不能导入swiper?

vue.js中能导入swiper插件。方法:1、使用npm工具安装swiper;2、在组件中使用import语句加载插件并导入相关文件;3、在HTML内容中通过添加相关class类来搭建swiper框架和引入相关样式即可。

返回分类 返回首页