欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

el-select 下拉框全選、多選的幾種方式組件示例詳解

 更新時間:2023年12月22日 10:01:43   作者:奮斗吧程序媛  
這篇文章主要介紹了el-select 下拉框全選、多選的幾種方式組件示例詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

組件一、基礎(chǔ)多選

適用性較廣的基礎(chǔ)多選,用 Tag 展示已選項

<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設(shè)置multiple屬性即可啟用多選,此時v-model的值為當前選中值所組成的數(shù)組。默認情況下選中值會以 Tag 的形式展現(xiàn),你也可以設(shè)置collapse-tags屬性將它們合并為一段文字。

<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 下拉框多選實現(xiàn)全選

下拉項增加一個【全選】,然后應該有以下幾種情況:

下拉選項全都勾選時,【全選】自動勾選;
下拉選項部分勾選時,點擊【全選】后,所有下拉項全部勾選;
下拉選項全都未勾選時,點擊【全選】后,所有下拉選項不勾選;
下拉選項和【全選】都選上的時候,不勾選任意下拉選項,【全選】按鈕就不勾選了
效果圖一、

上代碼:

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

效果圖二、

代碼:
直接添加一個【全選】復選框,實現(xiàn)的功能跟方法一是一樣的

<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;
 }

效果圖三、

下拉框和全選都加上 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”, 是為了去掉鼠標事件,阻止事件冒泡,觸發(fā)了兩次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 數(shù)量

思路: 
由于添加了:collapse-tags 屬性后,全選選中的時候,正常會默認選中第一個label的值顯示,后面是 + 全部數(shù)量 -1 .  我們可以在初始化的時候,把默認選中的數(shù)組里面最前面添加一項“全選”

// 初始化給下拉框選中 的數(shù)組賦值
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的變量存一下,把下拉框的數(shù)組 過濾出不含 全選的,剩余全部數(shù)據(jù)

2. 用selectArr的變量存一下, value的數(shù)組 過濾出不含 全選的,剩余全部數(shù)據(jù)

然后用新的2個變量去 執(zhí)行

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

最后在判斷  this.isCheckAll  是否是 true  是的話,就是全選。 在數(shù)組最前面添加 1項 value  ’全選‘
否則就移除 ’全選‘

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

這部分全部代碼如下:

    // 線路下拉框選擇事件
    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)
      }
    },

到此這篇關(guān)于el-select 下拉框全選、多選的幾種方式組件的文章就介紹到這了,更多相關(guān)el-select 下拉框全選、多選內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于vue-router的使用及實現(xiàn)原理

    關(guān)于vue-router的使用及實現(xiàn)原理

    這篇文章主要介紹了關(guān)于vue-router的使用及實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Element-ui/Element-plus?Vue報錯問題及解決

    Element-ui/Element-plus?Vue報錯問題及解決

    這篇文章主要介紹了Element-ui/Element-plus?Vue報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • iView UI FORM 動態(tài)添加表單項校驗規(guī)則寫法實例

    iView UI FORM 動態(tài)添加表單項校驗規(guī)則寫法實例

    這篇文章主要為大家介紹了iView UI FORM 動態(tài)添加表單項校驗規(guī)則寫法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 詳解Vue用cmd創(chuàng)建項目

    詳解Vue用cmd創(chuàng)建項目

    在本篇內(nèi)容里小編給大家整理了關(guān)于Vue用cmd創(chuàng)建項目的方法講解,有興趣的朋友們跟著學習下。
    2019-02-02
  • TypeError:res.forEach?is?not?a?function報錯解決辦法

    TypeError:res.forEach?is?not?a?function報錯解決辦法

    這篇文章主要給大家介紹了關(guān)于TypeError:res.forEach?is?not?a?function報錯的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-07-07
  • 一看就會的vuex實現(xiàn)登錄驗證(附案例)

    一看就會的vuex實現(xiàn)登錄驗證(附案例)

    這篇文章主要介紹了一看就會的vuex實現(xiàn)登錄驗證(附案例),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • vue數(shù)字金額動態(tài)變化功能實現(xiàn)方法詳解

    vue數(shù)字金額動態(tài)變化功能實現(xiàn)方法詳解

    這篇文章主要介紹了vue實現(xiàn)數(shù)字金額動態(tài)變化效果,數(shù)字動態(tài)變化是我們在前端開發(fā)中經(jīng)常需要做的效果,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • vue中rem的配置的方法示例

    vue中rem的配置的方法示例

    這篇文章主要介紹了vue中rem的配置的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 前端vue3?setup使用教程

    前端vue3?setup使用教程

    這篇文章主要為大家介紹了前端vue3架構(gòu)setup使用教程,詳細介紹?setup?的用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • 后臺使用freeMarker和前端使用vue的方法及遇到的問題

    后臺使用freeMarker和前端使用vue的方法及遇到的問題

    這篇文章主要介紹了后臺使用freeMarker和前端使用vue的方法及遇到的問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06

最新評論