Vue中使用 ElementUi 的 el-select 实现全选功能(思路详解)

 更新时间:2024年02月06日 11:35:55   作者:小熊猫Yzt_199626  
在开发中,有一个需求是 选项组件中使用到一个 全选的功能,特在这记录下实现的方法,方便后续的查阅,以及方便大家查阅借鉴,对vue   ElementUi 全选功能感兴趣的朋友一起看看吧

前言:在开发中,有一个需求是 选项组件中使用到一个 全选的功能,特在这记录下实现的方法,方便后续的查阅,以及方便大家查阅借鉴。若是有更好的方法,请大家传授传授。

效果图:

思路:就围绕是 ‘全选’ 还是 单选展开,用布尔字段 selectAll 来标识,selectAll 默认是 false 非全选。

全选分支:只有全选和取消权限操作。

单选分支:判断下选择到数组长度 是否 与所有选项长度一样,是的话就说明是全选。否则就是单选。

直接上简单的 demo:

<template>
  <div>
    <el-form ref="searchform" label-width="150px">
      <el-form-item label="select多选demo:">
        <el-select
          v-model="selectValue"
          @change="changeSelect"
          multiple
          clearable
          placeholder="请选择"
        >
          <el-option key="selectAll" label="全部" value="selectAll"></el-option>
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
          </el-option>
        </el-select>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      options: [
        {
          value: '选项1',
          label: '黄金糕'
        },
        {
          value: '选项2',
          label: '双皮奶'
        },
        {
          value: '选项3',
          label: '蚵仔煎'
        },
        {
          value: '选项4',
          label: '龙须面'
        },
        {
          value: '选项5',
          label: '北京烤鸭'
        }
      ],
      selectValue: [],
      selectAll: false // 用于标识是否全选--默认不全选
    }
  },
  created() {
    console.log(...this.options)
    console.log(this.options.filter(p => p.value != 'selectAll'))
  },
  methods: {
    changeSelect(value) {
      //  selectAll 为true 的时候,就走全选分支,全选后出现的情况就是取消权限
      if (this.selectAll) {
        this.selectAll = false
        if (value.indexOf('selectAll') > -1) {
          this.selectValue = value.filter(p => p != 'selectAll')
        } else {
          this.selectValue = []
        }
      } else {
        //   是否点击了‘全选'选项
        if (value.indexOf('selectAll') > -1) {
          // 有‘全选'选项,则将‘全部'和其他值放置一块
          const optionsValue = []
          this.options.forEach(item => {
            optionsValue.push(item.value)
          })
          this.selectValue = ['selectAll', ...optionsValue]
          this.selectAll = true
        } else {
          // 若是勾选选择的长度和提供的选项长度是一样的,则是 ‘全选'
          if (value.length === this.options.length) {
            const optionsValue = []
            this.options.forEach(item => {
              optionsValue.push(item.value)
            })
            this.selectValue = ['selectAll', ...optionsValue]
            this.selectAll = true
          } else {
            //   都是单选
            this.selectValue = value
          }
        }
      }
      // 真实的勾选值
      const realSelect = this.selectValue.filter(item => item != 'selectAll')
      console.log('realSelect', realSelect)
    }
  }
}
</script>
<style lang="scss" scoped></style>

这次的例子比较简单,希望对您有帮助,谢谢支持。

到此这篇关于VUE中使用 ElementUi 的 el-select 实现全选功能的文章就介绍到这了,更多相关vue ElementUi 全选内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用vue-router切换组件时使组件不销毁问题

    使用vue-router切换组件时使组件不销毁问题

    这篇文章主要介绍了使用vue-router切换组件时使组件不销毁问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)

    vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)

    这篇文章主要介绍了vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 在原生HTML中使用VUE的保姆级教学

    在原生HTML中使用VUE的保姆级教学

    Vue.js是一种流行的JavaScript框架,用于构建交互式的Web应用程序,这篇文章主要给大家介绍了关于在原生HTML中使用VUE的保姆级教学,需要的朋友可以参考下
    2023-10-10
  • Vue列表页渲染优化详解

    Vue列表页渲染优化详解

    这篇文章主要为大家详细介绍了Vue列表页渲染优化的操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Nuxt.js SSR与权限验证的实现

    Nuxt.js SSR与权限验证的实现

    这篇文章主要介绍了Nuxt.js SSR与权限验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Vue data中随意改一个属性,视图都会更新吗?

    Vue data中随意改一个属性,视图都会更新吗?

    这篇文章主要讨论Vue data中随意改一个属性,视图都会更新吗?下面来自面试官的问题然后做i出的一个问题总结,具有一定的参考价值,需要的小伙伴可以参考一下
    2021-12-12
  • vue3中 provide 和 inject 用法及原理

    vue3中 provide 和 inject 用法及原理

    这篇文章主要介绍vue3中 provide 和 inject 用法及原理,provide 和 inject可以 解决多次组件传递数据的问题,下面文章是具体的用法和实现原理,具有一定的参考价值,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • Vue2中easyplayer的使用教程详解

    Vue2中easyplayer的使用教程详解

    EasyPlayer.js是集播放http-flv, hls, websocket 于一身的H5视频直播/视频点播播放器, 使用简单, 功能强大,下面大家就跟随小编一起学习一下它的具体使用吧
    2023-08-08
  • 详解Vue项目部署遇到的问题及解决方案

    详解Vue项目部署遇到的问题及解决方案

    这篇文章主要介绍了详解Vue项目部署遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • uniapp使用webview内嵌H5的注意事项详解

    uniapp使用webview内嵌H5的注意事项详解

    在移动应用开发中,uniApp框架提供了一种跨平台的解决方案,允许开发者使用一套代码来构建iOS、Android等多平台的应用,这篇文章主要给大家介绍了关于uniapp使用webview内嵌H5的注意事项,需要的朋友可以参考下
    2024-07-07

最新评论