vue 二次封装组件(时间插件)

子组件 MdatePicker.vue

<template>
  <date-picker
    v-bind="$attrs"
    @input="onInput($event)"
    @change="e => onChange(e)"
    @open="onOpen"
    :class="size === 'small' ? 'small-picker' : ''"
    class="m-picker">
  </date-picker>
</template>

<script>
import DatePicker from 'vue2-datepicker'
import 'vue2-datepicker/index.css'
import 'vue2-datepicker/locale/zh-cn'
export default {
  props: {
    size: {
      type: String,
      default: 'normal'
    }
  },
  components: {
    DatePicker
  },
  methods: {
    onInput (val) {
      this.$emit('input', val)
    },
    onChange (e) {
      this.$emit('change', e)
    },
    onOpen () {
      this.$emit('open')
    }
  }
}
</script>
<style lang="less">
.m-picker{
  width: 100%;
  .mx-input{
    height: 32px;
    padding: 4px 11px;
    border-radius: 2px;
    border: 1px solid #d9d9d9;
    box-shadow: none;
    transition: border-color 0.3s;
    .mx-icon-calendar{
      font-size: 14px;
    }
    &:hover{
      border-color: #f5222d;
    }
    &:focus{
      border-color: #f5222d;
      box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2);
    }
    &::placeholder{
      color: #BFBFBF;
    }
  }
}
.small-picker{
  .mx-input{
    height: 24px;
    padding: 0 7px;
  }
}
.has-error .mx-input{
  border-color: #f5222d;
}
</style>

父组件通过 v-bind=“$attrs” 将除了props和自定义事件以外的其他属性传入子组件。

子组件通过@input="$emit(‘input’, $event)"改变父组件的v-model值。

父组件:

<MdatePicker
   v-model="date"
   :default-value="initDate"
   @change="changeDate"
   :disabled-date="disabledDate"
   placeholder="请选择日期"
   valueType="format"
   style="width: 120px;"
   size="small"
   :clearable="false" />

<input v-model="name">
相当于
<input v-bind:value="name" v-on:input="name= $event.target.value">

<MyInput v-model="name" />
相当于
<MyInput v-bind:value="name" v-on:input="name = argument[0]" />

通过input监听事件,name接收回调函数的第一个参数。
在自定义组件中,实现数据绑定,需要emit去触发input的事件,this.$emit(‘input’, val)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值