封装el-checkbox 对象数组回显+选中

5 篇文章 0 订阅
2 篇文章 0 订阅

elementUI组件的el-checkbox只能回显基本数据数组,现在遇到了一个需求是回显对象数组,查询了很多资料,可以修改elementUI源码来实现,但是那样不是很友好,所以就自己封装了一下。

父子组件调用

子组件

<template>
  <div>
    <el-checkbox-group v-model="checkArr" @change="handleChange">
      <el-checkbox v-for="item in myData" :key="item.id" :label="item.id">{{ item.name }}</el-checkbox>
    </el-checkbox-group>
  </div>
</template>

<script>
export default {
  name: 'myCheckBox',
  props: {
    // 父组件传递的已选中的对象数组
    myCheck: {
      type: Array,
      default: ()=>{
        return []
      }
    },
    // 父组件传递进来的所有可选项
    myData: {
      type: Array,
      default: ()=>{
        return []
      }
    }
  },
  data() {
    return {
      // 传递出去的对象数组
      checkList: [],
      // el-checkbox选中
      checkArr: [],
    }
  },
  created() {
  },
  watch:{
    // 改变对象数组为基本类型数组(el-checkbox使用)
    'myCheck':{
      handler(newValue){
        this.checkArr = newValue.map(item => item.id)
      },
      deep:true
    }
  },
  methods: {
    // 修改触发事件---传递给父组件选中的对象数组数据
    handleChange() {
      this.checkList = this.myData.filter(item => this.checkArr.includes(item.id))
      this.$emit('sendCheckList',this.checkList)
    }
  }
}
</script>

<style scoped>
</style>
父组件
<template>
 <div>
   <my-check-box :myData="dataArr" :myCheck="checkArr" @sendCheckList="myCheckArr"></my-check-box>
 </div>
</template>

<script>
import MyCheckBox from '@/views/myCheckBox'
export default {
  name: 'Index',
  components: { MyCheckBox },
  data() {
    return {
      // 传递给子组件的可选项
      dataArr:[],
      // 传递给子组件的对象选中数组
      checkArr: []
    }
  },
  created() {
  },
  mounted() {
   this.init()
  },
  methods: {
    // 初始化数据
    init(){
      setTimeout(()=>{
        this.dataArr =  [
          {id:1, name:'huahua1'},
          {id:2, name:'huahua2'},
          {id:3, name:'huahua3'},
          {id:4, name:'huahua4'}
        ]
        this.checkArr = [
          {id:1, name:'huahua1'},
          {id:2, name:'huahua2'}
        ]
      },1000)
    },
    // 替换父组件的选中对象数据
    myCheckArr(data){
      this.checkArr = data
    }
  }
}
</script>

<style lang="scss" scoped>
</style>

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值