<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Select 組件實現(xiàn)【全選】(基于 Element)

      〇、前言

      在 Element 中,Select 組件支持單選和多選,但是并沒有全選的屬性,因此只能通過其事件和屬性來實現(xiàn),本文將實現(xiàn)兩個簡單的示例。

      注意:本文的示例中,通過 leixing1 來兼容多控件共享同一方法。

      一、兩種實現(xiàn)

      1.1 通過添加一個 Checkbox 來操作全選(推薦)

      • 大致思路

      在全部選項最上邊添加一個 Checkbox 復(fù)選框,勾選時自動全選,取消勾選自動取消全部已選中項。

      再給 Select 添加一個 Change 事件方法,當(dāng)選中項等于備選列表長度,則自動勾選 Checkbox,否則取消勾選。

      • 實現(xiàn)效果

       

      • 前端實現(xiàn)代碼
      <el-select 
        class="select-item uniform-width"
        v-model="formData.leixing1"
        filterable multiple 
        clearable @change="changeSelect($event,'leixing1')"
        placeholder="全部類型(多選)"
      >
        <el-checkbox :indeterminate="isIndeterminate_lx" v-model="checked" @change="selectAll('leixing1')" style="padding:5px 0 10px 20px;">全選</el-checkbox>
        <el-option
          v-for="item in leixing1OptionsList"
          :label="item.mingcheng"
          :value="item.bianma"
          :key="item.bianma"
        />
      </el-select>
      • js 代碼實現(xiàn)
      <script>
      export default {
        name: "Example",
        data() {
          return {
            isIndeterminate:false,
            isIndeterminate_lx1:false,
            isIndeterminate_lx2:false,
            checked:false,
            checked_lx1:false,
            checked_lx2:false,
            formData:[],
            leixing1OptionsList:[
              {mingcheng:"第1項",bianma:"1"},
              {mingcheng:"第2項",bianma:"2"},
              {mingcheng:"第3項",bianma:"3"},
            ],
            leixing2OptionsList:[],
          };
        },
        methods: {
          changeSelect(val,leixing) {
            let list=[]
            let value=""
            switch (leixing){ // 根據(jù)不同的組件對取值進(jìn)行區(qū)分
              case "leixing1":
                list=this.leixing1OptionsList
                this.checked=this.checked_lx1
                break
              case "leixing2":
                list=this.leixing2OptionsList
                this.checked=this.checked_lx2
                break
            }
            if (this.formData[leixing].length==list.length) { // 全選
              this.checked=true
              this.isIndeterminate=false
            } else if (this.formData[leixing].length!=list.length && this.formData[leixing].length>0) {
              this.checked=false
              this.isIndeterminate=true
            }else if(this.formData[leixing].length==0){
              this.isIndeterminate=false
            }
            switch (leixing){
              case "leixing1":
                this.checked_lx1=this.checked
                this.isIndeterminate_lx1=this.isIndeterminate
                break
              case "leixing2":
                this.checked_lx2=this.checked
                this.isIndeterminate_lx2=this.isIndeterminate
                break
            }
          },
          selectAll(leixing) {
            let list=[]
            let value=""
            switch (leixing){ // 根據(jù)不同的組件對取值進(jìn)行區(qū)分
              case "leixing1":
                list=this.leixing1OptionsList
                this.checked=this.checked_lx1
                this.isIndeterminate_lx1=false
                value="bianma"  // 具體的取值屬性配置
                break
              case "leixing2":
                list=this.leixing2OptionsList
                this.checked=this.checked_lx2
                this.isIndeterminate_lx2=false
                value="key"  // 具體的取值屬性配置
                break
            }
            if (this.checked) { // 全選
              list.map((item) => {
                if(!this.formData[leixing].includes(item[value])) // 判斷是否已存在
                  this.formData[leixing].push(item[value])
              })
            } else { // 取消全選
              this.formData[leixing] = [];
            }
          },
        },
      };
      </script>

      1.2 通過增加一個 Option 選項‘全選’來實現(xiàn)

      • 大致思路

      手動增加 Select 的第一個選項‘全選’,通過這個選項的事件,來操作是否全選。

      再通過列表的長度和已選中的選項進(jìn)行比較,相等就自動勾選‘全選’,否則就取消勾選。

      注意:Select 組件的值會包含‘全選’這個值,需要在后端進(jìn)行過濾。

      • 實現(xiàn)效果

      • 前端控件代碼
      <el-select 
        class="select-item uniform-width"
        v-model="formData.leixing1"
        filterable multiple 
        clearable @change="changeSelect($event,'leixing1')"
        placeholder="全部類型(多選)"
      >
        <el-option label='全選' value='全選' @click.native="selectAll('leixing1')" v-if="leixing1OptionsList.length"></el-option>
        <el-option
          v-for="item in leixing1OptionsList"
          :label="item.mingcheng"
          :value="item.bianma"
          :key="item.bianma"
        />
      </el-select>
      • js 代碼實現(xiàn)及解釋
      <script>
      export default {
        name: "Example",
        data() {
          return {
            formData:[],
            leixing1OptionsList:[
              {mingcheng:"第1項",bianma:"1"},
              {mingcheng:"第2項",bianma:"2"},
              {mingcheng:"第3項",bianma:"3"},
            ],
            leixing2OptionsList:[],
          };
        },
        methods: {
          changeSelect(val,leixing) {
            let list=[]
            let value=""
            switch (leixing){ // 根據(jù)不同的組件對取值進(jìn)行區(qū)分
              case "leixing1":
                list=this.leixing1OptionsList
                break
              case "leixing2":
                list=this.leixing2OptionsList
                break
            }
            if (!val.includes('全選') && val.length === list.length) { // 手動選擇全部選項后,自動選中‘全選’
              this.formData[leixing].unshift('全選')
            } else if (val.includes('全選') && (val.length - 1) < list.length) { // 取消選中任一項,同時取消‘全選’
              this.formData[leixing] = this.formData[leixing].filter((item) => { return item !== '全選'})
            }
          },
          selectAll(leixing) {
            let list=[]
            let value=""
            switch (leixing){ // 根據(jù)不同的組件對取值進(jìn)行區(qū)分
              case "leixing1":
                list=this.leixing1OptionsList
                value="bianma"  // 具體的取值屬性配置
                break
              case "leixing2":
                list=this.leixing2OptionsList
                value="key"  // 具體的取值屬性配置
                break
            }
            if (this.formData[leixing]!=undefined && this.formData[leixing].length < list.length) { // 全選
              this.formData[leixing] = ['全選'] // 默認(rèn)選中‘全選’這一項
              list.map((item) => { // 將全部選項加入值列表
                if(!this.formData[leixing].includes(item[value])) // 判斷是否已存在
                  this.formData[leixing].push(item[value])
              })
            } else { // 取消全選
              this.formData[leixing] = [];
            }
          },
        },
      };
      </script>
      posted @ 2025-06-12 20:25  橙子家  閱讀(888)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲国产一区二区精品专| 精品精品国产国产自在线| 欧美一本大道香蕉综合视频| 国内精品久久久久影院日本| 亚洲中文一区二区av| 日韩深夜福利视频在线观看| 野花香电视剧免费观看全集高清播放 | 亚洲中文字幕无码专区| 国产精品爱久久久久久久电影| 欧美性色黄大片www喷水| 越南毛茸茸的少妇| 国产精品内射在线免费看| 性欧洲大肥性欧洲大肥女| 蜜芽久久人人超碰爱香蕉| 美腿丝袜亚洲综合第一页| 亚洲欧洲一区二区精品| 亚洲自偷自拍熟女另类| 九九热在线精品免费视频| 97欧美精品系列一区二区| 日产国产精品亚洲系列| 人人妻人人澡人人爽曰本| 国产美女被遭强高潮免费一视频| 亚洲精品国产自在久久| 亚洲欧洲成人a∨在线| 亚洲精品香蕉一区二区| 猫咪www免费人成网站| 欧洲美熟女乱av在免费| 亚洲av成人免费在线| 崇阳县| 乱人伦人妻系列| 人妻少妇看a偷人无码| 久久久久久综合网天天| 亚洲精品福利一区二区三区蜜桃| 色综合色国产热无码一| 日本一区二区三区专线| 亚洲天堂领先自拍视频网| 无码一区中文字幕| 女人香蕉久久毛毛片精品| 国产精品色内内在线播放| 无套内谢少妇毛片aaaa片免费| 激情综合网一区二区三区|