el-select 下拉框多选实现全选

在写一个功能时发现el-select支持多选,但是竟然不支持全选,好无语哦,那就自己实现一下吧~有两种方法,第二种感觉简单些

方法一:下拉项增加一个【全选】,然后应该有以下几种情况:
1.下拉选项全都勾选时,【全选】自动勾选;
2.下拉选项部分勾选时,点击【全选】后,所有下拉项全部勾选;
3.下拉选项全都未勾选时,点击【全选】后,所有下拉选项不勾选;
4.下拉选项和【全选】都选上的时候,不勾选任意下拉选项,【全选】按钮就不勾选了;

html部分:


js部分:

export default {
  data() {
    return {
      selectedArray: [],
      options: [
        { name: '一一', label: 'one' },
        { name: '二二', label: 'tow' },
        { name: '三三', label: 'three' },
        { name: '四四', label: 'four' },
        { name: '五五', label: 'five' }
      ]
    }
  },
  methods: {
    selectAll() {
      if (this.selectedArray.length < this.options.length) {
        this.selectedArray = []
        this.options.map((item) => {
          this.selectedArray.push(item.name)
        })
        this.selectedArray.unshift('全选')
      } else {
        this.selectedArray = []
      }
    },
    changeSelect(val) {
      if (!val.includes('全选') && val.length === this.options.length) {
        this.selectedArray.unshift('全选')
      } else if (val.includes('全选') && (val.length - 1) < this.options.length) {
        this.selectedArray = this.selectedArray.filter((item) => {
          return item !== '全选'
        })
      }
    },
    removeTag(val) {
      if (val === '全选') {
        this.selectedArray = []
      }
    }
  }
}

看效果

el-select 下拉框多选实现全选_第1张图片
el-select 下拉框多选实现全选_第2张图片

方法二:直接添加一个【全选】复选框,实现的功能跟方法一是一样的

html部分:


js部分

export default {
  data() {
    return {
      checked: false,
      selectedArray: [],
      options: [
        { name: '一一', label: 'one' },
        { name: '二二', label: 'tow' },
        { name: '三三', label: 'three' },
        { name: '四四', label: 'four' },
        { name: '五五', label: 'five' }
      ]
    }
  },
  methods: {
    selectAll() {
      this.selectedArray = []
      if (this.checked) {
        this.options.map((item) => {
          this.selectedArray.push(item.name)
        })
      } else {
        this.selectedArray = []
      }
    },
    changeSelect(val) {
      if (val.length === this.options.length) {
        this.checked = true
      } else {
        this.checked = false
      }
    }
  }
}

css部分

.el-checkbox {
    text-align: right;
    width: 100%;
    padding-right: 10px;
  }

效果图

el-select 下拉框多选实现全选_第3张图片
el-select 下拉框多选实现全选_第4张图片

你可能感兴趣的:(借鉴与整理和个人升级)