vue結合element-ui 的select 全選問題


下拉列表多選 問題

  通過操作 所有來進行全選 全不選問題

element-ui 中 select

  記錄下自己最近使用element-ui 中的 select多選問題
  在element中默認是指單純多選,但是公司要求,需要有一個控制選擇多選的值。測試許久終於整出來,特意記錄一下

思路

  • element 中的組件
<template>
  <el-select v-model="value5" collapse-tags multiple placeholder="請選擇">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>  

//數據
data() {
 return {
    options: [{
        value: '選項1',
        label: '黃金糕'
    }, {
        value: '選項2',
        label: '雙皮奶'
    }, {
        value: '選項3',
        label: '蚵仔煎'
    }, {
        value: '選項4',
        label: '龍須面'
    }, {
        value: '選項5', 
        label: '北京烤鴨'
    }],
    value5: []
 }
}    
  • 默認是這樣的

// template
給el-select 添加 change事件 

//data 中添加 
oldOptions // 用來儲存上一次的數據

//methods
selectAll(val) {
    let allValues = []
    //保留所有值
    for (let item of this.options) {
        allValues.push(item.value)
    }

    // 用來儲存上一次的值,可以進行對比
    const oldVal = this.oldOptions.length === 0 ? [] : this.oldOptions

    // 若是全部選擇
    if (val.includes('選項0')) this.value5 = allValues

    // 取消全部選中  上次有 當前沒有 表示取消全選
    if (oldVal.includes('選項0') && !val.includes('選項0')) this.value5 = []

    // 點擊非全部選中  需要排除全部選中 以及 當前點擊的選項 
    // 新老數據都有全部選中 
    if (oldVal.includes('選項0') && val.includes('選項0')) {
        const index = val.indexOf('選項0')
        val.splice(index, 1) // 排除全選選項
        this.value5 = val
    }

    //全選未選 但是其他選項全部選上 則全選選上 上次和當前 都沒有全選
    if (!oldVal.includes('選項0') && !val.includes('選項0')) {
        console.log(11)
        if (val.length === allValues.length - 1) this.value5 = ['選項0'].concat(val)
    }

    //儲存當前最后的結果 作為下次的老數據 
    this.oldOptions = this.value5
}
  • 最終效果

 

 

原文鏈接:https://www.cnblogs.com/sinosaurus/p/9047395.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM