element的DateTimePicker时间选择器确定才变更时间的问题

需求:是点击确定才变更时间

element的组件是change就会改变双向绑定的值,

看到源码有handleClose方法,于是尝试在handleClose方法动收件,并且套了一层,封装这个DateTimePicker组件,

缺点:
点击确定后,派发给父组件的值,在提交前需要处理转化一下格式,但是好歹算是实现了

父组件:

   <picker
		:disabled="false"
	    v-model="timer"
	    format="yyyy.MM.dd HH:mm"
	    value-format="yyyy.MM.dd HH:mm"
	    type="datetime"
	    placeholder="选择日期时间"
	    default-time="12:00:00"
    >
    </picker>
...
 components: {
	 'picker': import 'xxx/picker.vue',
  },
data(){
	return{
		timer:""
	}
},



子组件:


<template>
    <el-date-picker
            ref="datePicker"
            v-bind="$attrs"
            v-model="pValue"
            @change="handleChange"></el-date-picker>
</template>

<script>
    module.exports = {
        name: "picker",
        data() {
            return {
                pValue: "",
                clickOutsideFlag: false,
                childHandleClose: null
            };
        },
        props: {
            value: {
                type: [Date, String, Array],
                required: true
            }
        },
        created() {
        	//不用moment的话自己处理一下时间格式
  			const timer = moment(this.value, "YYYYMMDDHHmmss").format(`YYYY.MM.DD HH:mm`);
            this.$emit('input', timer);
        },
        mounted() {
            this.childHandleClose = this.$refs.datePicker.handleClose;
            this.$refs.datePicker.handleClose = this.handleClose;
        },
        watch: {
            value(val) {
                if (val === null || val === undefined) {
                    this.pValue = "";
                } else {
                    this.pValue = val;
                }
                this.updateInput();
            },
        },
        methods: {
            handleChange() {
                if (!this.clickOutsideFlag) {
                    this.updateInput();
                    this.$emit("change", this.pValue);
                } else {
                    this.clickOutsideFlag = false;
                    this.pValue = this.value;
                }
            },
            handleClose() {
                if (this.$refs.datePicker.pickerVisible) {
                    this.clickOutsideFlag = true;
                    this.childHandleClose();
                }
            },
            updateInput() {
                this.$emit('input', this.pValue);
                this.$refs.datePicker.$refs.reference.$refs.input.value = this.value;
            }
        }
    };
</script>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值