利用element-ui进行二次封装业务组件过程

业务组件-CheckBox

1.组件说明

下拉框,可以单选或多选

2.Props

参数说明类型可选值默认值
data接收父组件v-model的值String,Array
options下拉框字典数据源Array[ ]
value下拉框valueString‘value’
label下拉框labelString‘label’
disabled是否可用,为true表示不可用,false为可用Booleanfalse
isMultiple是否多选,为true表示多选,false为单选Booleanfalse

3.data

参数说明类型可选值默认值
selectedData业务组件自身v-modelarray[ ]

4.Events(子组件 -> 父组件)

事件名实现方法名说明回调参数
changehandleSelectedChange当选中节点变化时触发,在此主要用于传值给父组件选中节点的值

实现代码:

methods: {
    handleSelectedChange(val){
        this.$emit('input', val)
    }
} 

4.父子组件相互通信

业务场景:
当处于“查看”记录时,父组件取得后端数据后,将数据传给业务组件,让其在前端展示,这是典型的父传子;
当对该记录进行编辑时,会在前端重新选择下拉框的值,并将重新 选择到的值又返回给父组件,这就是子传父;

解决思路:
组件间的传值,想到的是Props(父传子),再通过$emit(子传父)即满足要求;
父组件除了与业务组件传值,其实它自己本身也需要与自身的data进行传值,因为它还需要取得后端的数据,
且父组件接收到业务组件重新选值后,还需要将新值再返回给后端更新;
那不能在父组件中定义v-model同时满足自已需求,也能传值给到业务组件呢?

实现方法

  • 父组件定义v-model
<el-form-item label="测试checkbox复选">
  <checkboxCom v-model="pageForm.multiChecked" :options="personalPlans" value="key" label="text">
  </checkboxCom>
</el-form-item>
  • 业务组件重新定义父组件的v-model,用于获取父组件的v-model的值
model: { // 此model内定义的prop默认重新定义父组件v-model中的value属性,变成data属性
      prop: 'data'
      // event: 'change' //也可以重新定义父组件v-model中的input的事件名,变成change事件名
    },
props: {
  // 来自父组件已选中数据;如果是单选,data为String, 如果是复选,则data为Array
  data:[String,Array]//这个与上面的model的prop是一一对应的
  • 业务组件获取到父组件值后,需要将其值给到业务组件自己的value
  //业务组件中的template部分
  <el-select v-model="selectedData" :multiple="isMultiple" @change="handleSelectedChange" placeholder="请选择">
    <el-option v-for="(item,index) in options" :key="index" :label="item[label]" :value="item[value]">
    </el-option>
  </el-select>
// 业务组件script部分
// 为啥要设置wathc是因为mounted只会加载一次,当this.data变化时,不会重新加载,所以需要启用到wathc监听
watch: {
  data() {
    this.selectedData = this.data
  }
},
created() {
  this.selectedData = this.data
},
  • 业务重新选值后,需要将值再传给父组件
methods: {
    handleSelectedChange(val){
        this.$emit('input', val) // 'input'是父组件v-model中自带的事件名
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值