el-select 下拉框全选、多选的几种方式组件

这篇具有很好参考价值的文章主要介绍了el-select 下拉框全选、多选的几种方式组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

组件一、基础多选

适用性较广的基础多选,用 Tag 展示已选项

elselect多选,elment UI ,elementui

<template>
  <el-select v-model="value1" multiple placeholder="请选择">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>

<script>
  export default {
    data() {
      return {
        options: [{
          value: '选项1',
          label: '黄金糕'
        }, {
          value: '选项2',
          label: '双皮奶'
        }, {
          value: '选项3',
          label: '蚵仔煎'
        }, {
          value: '选项4',
          label: '龙须面'
        }, {
          value: '选项5',
          label: '北京烤鸭'
        }],
        value1: []
      }
    }
  }
</script>

el-select设置multiple属性即可启用多选,此时v-model的值为当前选中值所组成的数组。默认情况下选中值会以 Tag 的形式展现,你也可以设置collapse-tags属性将它们合并为一段文字。

elselect多选,elment UI ,elementui

<template>
  <el-select
    v-model="value2"
    multiple
    collapse-tags
    style="margin-left: 20px;"
    placeholder="请选择">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>

<script>
  export default {
    data() {
      return {
        options: [{
          value: '选项1',
          label: '黄金糕'
        }, {
          value: '选项2',
          label: '双皮奶'
        }, {
          value: '选项3',
          label: '蚵仔煎'
        }, {
          value: '选项4',
          label: '龙须面'
        }, {
          value: '选项5',
          label: '北京烤鸭'
        }],
        value2: []
      }
    }
  }
</script>

 组件二、el-select 下拉框多选实现全选

下拉项增加一个【全选】,然后应该有以下几种情况:

  1. 下拉选项全都勾选时,【全选】自动勾选;
  2. 下拉选项部分勾选时,点击【全选】后,所有下拉项全部勾选;
  3. 下拉选项全都未勾选时,点击【全选】后,所有下拉选项不勾选;
  4. 下拉选项和【全选】都选上的时候,不勾选任意下拉选项,【全选】按钮就不勾选了

效果图一、
elselect多选,elment UI ,elementui

上代码:

<template>
    <el-select multiple collapse-tags v-model='selectedArray' @change='changeSelect' @remove-tag='removeTag' placeholder='请选择'>
        <el-option label='全选' value='全选' @click.native='selectAll'></el-option>
        <el-option v-for='(item, index) in options' :key='index' :label='item.name' :value='item.name'></el-option>
     </el-select>
</template>

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 = []
      }
    }
  }
}

效果图二、
elselect多选,elment UI ,elementui

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

<template>
  <el-select multiple collapse-tags v-model='selectedArray' @change='changeSelect' placeholder='请选择'>
    <el-checkbox v-model="checked" @change='selectAll'>全选</el-checkbox>
    <el-option v-for='(item, index) in options' :key='index' :label='item.name' :value='item.name'></el-option>
  </el-select>
</template>

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
      }
    }
  }
}
.el-checkbox {
    text-align: right;
    width: 100%;
    padding-right: 10px;
 }

效果图三、

elselect多选,elment UI ,elementui

下拉框和全选都加上 checkbox,选择框 el-select 全选 多选, el-option与el-checkbox的组合使用

需要注意的事项:

1. el-select与el-checkbox-group的v-model 绑定的值,需相同,绑定同一个变量
2. el-option的value与el-checkbox的label绑定的值也需要相同
3. el-checkbox 需要使用 style=“pointer-events: none”, 是为了去掉鼠标事件,阻止事件冒泡,触发了两次el-select的change事件


代码如下:

 <el-select
                v-model="lineNumStage"
                v-bind="$attrs"
                multiple
                style="width: 100%;"
                placeholder="请选择线路"
                @change="handleSelect"
              >
                <div style="padding: 0 20px; line-height:34px">
                  <el-checkbox v-model="isCheckAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">全选</el-checkbox>
                </div>
                <el-checkbox-group v-model="lineNumStage">
                  <el-option v-for="item in checkedLineArry" :key="item.value" :label="item.name" :value="item.value">
                    <el-checkbox style="pointer-events: none" :label="item.value">
                      {{ item.label }}
                    </el-checkbox>
                  </el-option>
                </el-checkbox-group>
              </el-select>
checkAll: false, // 是否全选
isIndeterminate: false, //全选复选框标识        
options: [
    { name: '京广高速', value: '京广高速' },
    { name: '京包客专', value: '京包客专' },
    { name: '京哈高速', value: '京哈高速' },
    { name: '崇礼线',   value: '崇礼线' },
    { name: '京秦高铁', value: '京秦高铁' },
    { name: '京沪高铁', value: '京沪高铁' },
    { name: '京津城际', value: '京津城际' },
],
biddingStage: [],


// 下拉框选择事件
handleSelect(value) {
    const checkedCount = value.length;
    this.checkAll = checkedCount === this.options.length;
    this.isIndeterminate = checkedCount > 0 && checkedCount < this.options.length;
},
// 全选事件
handleCheckAllChange(val) {
    const data = this.options.map(item => {
        return item.value
    })
    this.biddingStage = val ? data : [];
    this.isIndeterminate = false;
},

注:  如果需要把右边的√去掉,el-select加上class和popper-append-to-body=false属性,然后css修改 

 /deep/ .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after {
   	display: none;
}

效果图四、 全选全部选中的时候,下拉框的文字是全选,后面是 + 12 数量

elselect多选,elment UI ,elementui

思路: 
由于添加了:collapse-tags 属性后,全选选中的时候,正常会默认选中第一个label的值显示,后面是 + 全部数量 -1 .  我们可以在初始化的时候,把默认选中的数组里面最前面添加一项“全选”

// 初始化给下拉框选中 的数组赋值

this.biddingStage = [ '京广高速','京包客专', '京哈高速','崇礼线','京沪高铁','京津城际']

this.biddingStage.unshift('全选')

然后在全选的方法里面:判断如果是全选就在最前面 添加1项 value 值 ‘全选’

// 全选事件
handleCheckAllChange(val) {
    const data = this.options.map(item => {
        return item.value
    })
    // this.biddingStage = val ? data : [];
     if (val) {
        this.biddingStage = data
        this.biddingStage .unshift('全选')
      } else {
        this.biddingStage  = []
      }
    this.isIndeterminate = false;
},

然后在 下拉框选项改变的时候: 

1. 先用arr1的变量存一下,把下拉框的数组 过滤出不含 全选的,剩余全部数据

2. 用selectArr的变量存一下, value的数组 过滤出不含 全选的,剩余全部数据

然后用新的2个变量去 执行

      const checkedCount = selectArr.length
      this.isCheckAll = checkedCount === arr1.length
      this.isIndeterminate = checkedCount > 0 && checkedCount < arr1.length

最后在判断  this.isCheckAll  是否是 true  是的话,就是全选。 在数组最前面添加 1项 value  ’全选‘
否则就移除 ’全选‘
 

      if (this.isCheckAll) {
        console.log('quanxuan')
        this.biddingStage.unshift('全选')
      } else {
        this.biddingStage = this.biddingStage.filter((item) => {
          return item !== '全选'
        })
        console.log(this.biddingStage)
      }

这部分全部代码如下:文章来源地址https://www.toymoban.com/news/detail-731991.html

    // 线路下拉框选择事件
    handleSelect(value) {
      console.log('value:', value)
      const arr1 = this.options.filter((item) => {
        return item !== '全选'
      })
      const selectArr = value.filter((item) => {
        return item !== '全选'
      })
      const checkedCount = selectArr.length
      this.isCheckAll = checkedCount === arr1.length
      this.isIndeterminate = checkedCount > 0 && checkedCount < arr1.length
      if (this.isCheckAll) {
        console.log('quanxuan')
        this.biddingStage.unshift('全选')
      } else {
        this.biddingStage= this.biddingStage.filter((item) => {
          return item !== '全选'
        })
        console.log(this.biddingStage)
      }
    },

到了这里,关于el-select 下拉框全选、多选的几种方式组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-select控制单选还是多选

    2024年02月13日
    浏览(25)
  • el-select 支持多选 搜索远程数据 组件抽取

    使用方式 组件

    2024年02月09日
    浏览(27)
  • el-select 无限下拉滚动加载数据

    template   div     el-form       ref=\\\"saveParameter\\\"       :model=\\\"saveParameter\\\"       inline       inline-message       style=\\\"margin:10px\\\"           el-form-item label=\\\"供应商\\\" prop=\\\"lngcustomerid\\\"         el-select           v-model=\\\"saveParameter.lngcustomerid\\\"           v-loadmore=\\\"loadMore()\\\"           styl

    2024年02月14日
    浏览(27)
  • Element-UI el-select多选表单校验问题

    在使用 el-select 多选下拉菜单配置表单校验时, 如果form表单绑定的form对象对应属性值为空字符串或者null(其他未尝试),表单中的多选下拉框会立刻执行校验并弹出校验信息,代码如下: 正确方式如下: 将多选下拉框对应的属性值默认值设置未空数组即可

    2024年02月16日
    浏览(43)
  • el-select 多选框使用 以及回显默认选中说明

    改动点 el-select 添加属性  multiple,  v-model=  绑定的必须是个数组,在data中定义好,  回显的时候,后台传递数组有值就能显示多个选中的。 后台 遇到问题建议多看element官网文章 ,下拉框单选、多选、输入检索都有案例 学习来源: el-select 多选框使用 以及回显默认选中

    2024年02月13日
    浏览(31)
  • element el-select下拉框选择失效

    2023.1.11今天我学习了使用element el-select组件下拉框选择数据失效的原因以及解决办法。 如图:   当我已经选择启用状态的时候,然后点击停用状态没反应。 是因为在配置表单的过程中,重复使用了这个字段。 如: 就是在表单中重复使用了status这个字段,然后导致选择失效。

    2024年02月16日
    浏览(29)
  • 关于Element-UI el-select多选表单校验问题

       在使用 el-select 多选下拉菜单配置表单校验时, 如果form表单绑定的form对象对应属性值为空字符串或者null(其他未尝试),表单中的多选下拉框会立刻执行校验并弹出校验信息,代码如下: 正确方式如下: 将多选下拉框对应的属性值默认值设置未空数组即可

    2024年02月11日
    浏览(36)
  • 记录el-select+el-tree复选框,支持模糊查询,懒加载,树父子节点不关联,不全选

    需求:一个机构下拉菜单,一个人员下拉菜单,默认带入当前登录用户的机构和人员。机构下拉菜单为两个接口,模糊查询为一个接口不包含懒加载,默认非模糊查询情况下为一个接口,点击节点懒加载。机构下拉菜单数据变动更新人员下拉菜单数据。日期默认为当天

    2024年01月15日
    浏览(31)
  • 修改el-select和el-input样式;修改element-plus的下拉框el-select样式

    修改el-select样式 input如下 el-input clearable v-model=\\\"name\\\" placeholder=\\\"请输入\\\" class=\\\"input-with-select input_box\\\" style=\\\"width: 148px;margin: 0 40px;position: absolute;right:67px;\\\" /

    2024年02月13日
    浏览(29)
  • Element-UI el-select 多选菜单换行撑开

    问题描述:           Element-UI el-select 多选菜单换行撑开显示破坏整体样式  问题解决:         添加如下样式:          若出现滚动条样式不好看,可以更改样式,和elementui保持一致。        

    2024年02月16日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包