解決el-checkbox-group 的v-model無法綁定對象數組


  elementUI官方文檔中el-checkbox-group組件綁定的都為一維數組,真實業務中數據綁定往往是多個鍵值對的對象數組,本文主要解決這個問題。

如下代碼:

<el-checkbox-group class="title-list" v-model="selTitles" @change='selchange'
>
  <el-checkbox class="titles" v-for='(allItem, allItemIndex) in allTitles' :label="allItem" :key="allItem.value">{{allItem.lable}}</el-checkbox> </el-checkbox-group>
data () {
    return {
      selTitles: [{
          value: 'sex',
          lable: '性別'
        },{
          value: 'status',
          lable: '檢查狀態'
        },], // 已選擇列
      allTitles: [
        {
          value: 'status',
          lable: '檢查狀態'
        },
        {
          value: 'name',
          lable: '姓名',
        },
        {
          value: 'sex',
          lable: '性別'
        },
        {
          value: 'age',
          lable: '年齡'
        }
      ], // 全部列
    };
  }


直接將el-checkbox的lable屬性綁定為數組的每一項元素,在chang事件selchange中就能獲取到被選中項目的全信息,包括value、label,此時會發現設置初始選中選項會設置不上,並且初始設入selTitles中的選項,頁面顯示並未選中,但勾選時第一次勾選不上,第二次才能勾選上,由此現象認為可能是elementui的bug,或者說人組件庫壓根就不支持el-checkbox-group組件綁定的對象數組,但每次選擇項目改變還需要轉換下數據實在是腦殼疼,所有就想着直接改組件庫底層代碼豈不快哉!

初始設入selTitles中的選項,勾選時第一次勾選不上,第二次才能勾選上,猜想可能數據已經設入被選項了,只是頁面未顯示選中,審查元素發現有個is-checked控制頁面顯示選中,於是捋到了源碼中的如下代碼:

 

 

 更改步驟

1、從github上獲取elementUI源碼,安裝依賴,

2、將上圖兩個組件(packages\checkbox\src\目錄中)中畫紅框代碼換為如下代碼即可

return this.model.indexOf(this.label) > -1 || JSON.stringify(this.model).indexOf(JSON.stringify(this.label)) > -1;

3、運行命令:npm run dist,將生成的lib包替換項目node-module的elementui 文件夾中的lib

ok,接下來就可以隨心所欲了!

 


免責聲明!

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



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