view-ui中select全选实现

最近,项目中有个需求:给select多选框增加一键全选的功能。 因为view-ui的select组件是不自带一键全选功能的,我决定自己封装一个。主要需求如下:
1.点击全选,选项全部勾选。
2.选项全部勾选情况下,点击全选,选项全部未勾选。
3.全选状态下,去掉任意一个选项,全选√消失。

一、三种情况分别如下:
1.
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述
二、关键问题
要实现这些最关键的就是要清楚,select选中是通过v-model的双向绑定实现的。要改变select的选中值,就是通过改变v-model绑定的值实现。
三、部分代码如下:

<FormItem label="公司">
  <Select
    v-model="formItem.select"
    @on-change="changeSelect"
    multiple
    filterable
  >
    <Checkbox v-model="checked" @on-change="selectAll">全选</Checkbox>
    <Option v-for="item in coList" :key="item.id" :value="item.id">{{
      item.name
    }}</Option>
  </Select>
</FormItem>
  data() {
    return {
      coList: [
        { id: 1, name: "百度" },
        { id: 2, name: "腾讯" },
        { id: 3, name: "阿里" },
        { id: 4, name: "字节" },
        { id: 5, name: "平安" },
        { id: 6, name: "网易" },
      ],
      checked: false,
      selectedArray: [],
    };
  },
  methods: {
    selectAll() {
      /* Checkbox被选中 */
      if (this.checked) {
        this.selectedArray = [];
        /* 通过遍历coList数组,将item.id全部添加进selectArray这个数组 */
        this.coList.map((item) => {
          this.selectedArray.push(item.id);
        });
        /* 将选择框select通过v-model进行双向绑定的formItem.select进行以下赋值
        下列式子相当于this.formItem.select = [1,2,3,4,5,6] */
        this.formItem.select = this.selectedArray;
      } /* Checkbox未被选中 */ 
        else {
          this.formItem.select = "";
      }
    },
    changeSelect(e) {
      if (e.length === this.coList.length) {
        this.checked = true;
      } else {
        this.checked = false;
      }
    },
  },

至此,大功告成。


版权声明:本文为weixin_41777814原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。