最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

組件一、基礎多選

適用性較廣的基礎多選,用 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設置multiple屬性即可啟用多選,此時v-model的值為當前選中值所組成的數(shù)組。默認情況下選中值會以 Tag 的形式展現(xiàn),你也可以設置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)
      }
    },

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

相關文章

  • requirejs + vue 項目搭建詳解

    requirejs + vue 項目搭建詳解

    這篇文章主要介紹了requirejs + vue 項目搭建詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • vue嵌套組件傳參實例分享

    vue嵌套組件傳參實例分享

    這篇文章主要介紹了vue嵌套組件傳參實例分享,本文以一個vue遞歸組件為例,探究多層嵌套后事件無法觸發(fā)的問題,我們可以通過查看一Demo,便于快速了解,下文列舉例子需要的小伙伴可以參考一下
    2022-04-04
  • 基于axios請求封裝的vue應用實例代碼

    基于axios請求封裝的vue應用實例代碼

    這篇文章主要給大家介紹了基于axios請求封裝的vue應用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • vue中改變滾動條樣式的方法

    vue中改變滾動條樣式的方法

    這篇文章主要介紹了vue中改變滾動條樣式的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • vue 實現(xiàn)tab切換保持數(shù)據(jù)狀態(tài)

    vue 實現(xiàn)tab切換保持數(shù)據(jù)狀態(tài)

    這篇文章主要介紹了vue 實現(xiàn)tab切換保持數(shù)據(jù)狀態(tài),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue 子組件修改data或調(diào)用操作

    vue 子組件修改data或調(diào)用操作

    這篇文章主要介紹了vue 子組件修改data或調(diào)用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 一文帶你詳細了解Vue中的v-for

    一文帶你詳細了解Vue中的v-for

    v-for循環(huán)遍歷數(shù)據(jù),永遠不要把v-if和v-for同時用在同一個元素上,下面這篇文章主要給大家介紹了關于如何通過一文帶你詳細了解Vue中v-for的相關資料,需要的朋友可以參考下
    2022-10-10
  • vue-content-loader內(nèi)容加載器的使用方法

    vue-content-loader內(nèi)容加載器的使用方法

    這篇文章主要介紹了vue-content-loader內(nèi)容加載器的使用方法,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • vue?elementui?實現(xiàn)搜索欄子組件封裝的示例代碼

    vue?elementui?實現(xiàn)搜索欄子組件封裝的示例代碼

    這篇文章主要介紹了vue?elementui?搜索欄子組件封裝,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • vite添加環(huán)境變量import.meta.env方式

    vite添加環(huán)境變量import.meta.env方式

    Vite通過`import.meta.env`對象暴露環(huán)境變量,可以在不同文件中配置不同環(huán)境下的變量,便于維護和使用,配置環(huán)境變量和模式時,需要注意在字符串中使用`import.meta.env.VITE_APP_TITLE`的方式,避免打包報錯
    2026-01-01

最新評論

华蓥市| 元谋县| 临泉县| 济南市| 汽车| 友谊县| 彰化市| 开远市| 黎川县| 铅山县| 华坪县| 宜昌市| 长春市| 荆州市| 宁强县| 黑龙江省| 岑巩县| 大丰市| 墨脱县| 兴海县| 隆德县| 闽侯县| 东港市| 普兰店市| 宝应县| 乐业县| 墨竹工卡县| 临湘市| 鹤山市| 布尔津县| 和政县| 陇南市| 六盘水市| 长沙市| 观塘区| 镇宁| 高雄县| 苍南县| 灌云县| 建昌县| 治县。|