封装element-plus年份范围选择器

由于项目中有需要使用年份范围选择器,而element-plus没有提供,故进行二次封装组件,效果图:
在这里插入图片描述
基本功能:因为新增和编辑中都需要用到该组件,所以该组件需要能够动态的拿到值(新增拿到值)和回显值(编辑时回显),并且可以触发element的Rules

<script setup lang="ts">
import { ref, watch } from 'vue';
interface Props {
  modelValue: string;
}
// 接收组件的v-model绑定值
const props = defineProps<Props>();
// 向组件的v-model发送值
const emit = defineEmits<{
  (e: 'update:modelValue', date: string): void;
}>();
const year = ref(); // 开始年
const year1 = ref(); // 结束年

watch(() => props.modelValue,(val) => {
  if (val) {
    const [start, end] = val.split('/'); // 赋值时的格式同样为 2015/2018,然后解构赋值给year和year1
    year.value = start;
    year1.value = end;
  }
},{
  immediate: true
});

watch([year, year1], ([year, year1]) => {
  if (year && year1) {
    emit('update:modelValue', `${year}/${year1}`); // 向父组件发送值,值的格式为 2015/2018
  }
});
</script>
<template>
	<el-date-picker
      v-model="year"
      value-format="YYYY"
      type="year"
      placeholder="请选择开始年"
    />
    <div class="segmentation"></div>
    <el-date-picker
      v-model="year1"
      value-format="YYYY"
      type="year"
      placeholder="请选择结束年"
    />
</template>

第一眼看这些代码可能会造成死循环但是并不会,两个watch是独立开的

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中二病也要写前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值