element-plus日期选择器2次封装

预期效果

官网默认样式:
在这里插入图片描述修改后的样式:

在这里插入图片描述

代码实现

DatePicker.vue

<template><div class="date-picker-container"><el-date-picker v-model="date" @change="handleChange" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" /></div>
</template><script setup>import { ref, reactive, defineModel } from 'vue'//   const date = ref('')const date = defineModel()//  父传子const props = defineProps({ width: { type: String, default: '150px' } })// 子传父const emits = defineEmits(['datePickerChange'])const handleChange = () => {console.log(' handleChange ')emits('datePickerChange', date)}
</script>
<style lang="scss" scoped>.date-picker-container {width: 150px;height: 20px;color: #8dd8ff;}:deep(.el-date-editor.el-input) {--el-date-editor-width: v-bind(props.width);}:deep(.el-input__inner) {margin-left: -5px;}:deep(.el-input__wrapper) {background-color: transparent !important;border: 1px solid #47b7ff;box-shadow: none;}:deep(.el-input__prefix) {margin-left: -5px;color: #8dd8ff;}
</style>

父组件调用

 <DatePicker v-model="dataPickerDate" @datePickerChange="changeDate" :width="'200px'"></DatePicker>import DatePicker from './TreeTable/DatePicker.vue'const dataPickerDate = ref('')onMounted(() => {date.value = moment().format('YYYY-MM-DD') // 在父组件修改日期getData() // 调用接口的函数})const changeDate = () => {console.log('dataPickerDate父亲', dataPickerDate.value)getData() // 调用接口的函数}

这里面用defineMode来实现父子组件的数据绑定,比props和emits更加方便,defineModel用法讲解传送门

代码优化

新增一个功能:未来的日期不可以选择
父组件:

<DatePicker :disabled-date="disabledDate" v-model="dataPickerDate" @datePickerChange="changeDate" :width="'200px'"></DatePicker>const disabledDate = (time) => {return time.getTime() > Date.now()}

子组件增加v-bind=“$attrs”

在子组件中,v-bind="$attrs" 的作用是将父组件传递给子组件的非 prop 属性绑定到子组件的根元素上。

  <el-date-picker v-bind="$attrs" v-model="date" @change="handleChange" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" />

使用v-bind="$attrs"后就可以把之前在父子组件写了两边的的emits和v-model删掉,修改后代码:

父组件:

  <DatePicker :disabled-date="disabledDate" v-model="dataPickerDate" @change="changeDate" :width="'200px'"></DatePicker>const dataPickerDate = ref('')onMounted(() => {date.value = moment().format('YYYY-MM-DD') // 在父组件修改日期getData() // 调用接口的函数})const changeDate = () => {console.log('dataPickerDate父亲', dataPickerDate.value)getData() // 调用接口的函数}const disabledDate = (time) => {return time.getTime() > Date.now()}

子组件:

<template><div class="date-picker-container"><el-date-picker v-bind="$attrs" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" /></div>
</template>//  父传子const props = defineProps({ width: { type: String, default: '150px' } })

v-bind="$attrs"详细解释:

当父组件使用子组件时,父组件可能会传递一些额外的属性给子组件,这些属性在子组件中并没有声明为 prop。使用 v-bind="$attrs" 可以将这些额外的属性传递给子组件的根元素。

在你提供的代码中,父组件使用了 <DatePicker> 组件,并传递了 v-model@change:disabled-date 这些属性给子组件。然而,在子组件的 <el-date-picker> 标签中,并没有声明这些属性。

通过在子组件的 <el-date-picker> 标签上使用 v-bind="$attrs",可以将父组件传递的这些额外属性绑定到子组件的根元素上,确保这些属性能够正确地传递给 <el-date-picker> 组件。

这样,子组件就能够接收到父组件传递的 v-model@change:disabled-date 属性,并在子组件内部使用它们。

总结起来,v-bind="$attrs" 的作用是将父组件传递给子组件的非 prop 属性绑定到子组件的根元素上,以确保这些属性能够正确传递给子组件内部的其他组件或元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478606.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 TIM输入捕获测频率占空比库函数

目录 一、输入捕获初始化函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit 二、主从触发模式对应函数 TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 三、配置分频器函数 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler T…

Camunda快速入门(四):设计一个带网关的流程

接上一篇文章&#xff1a;Camunda快速入门&#xff08;三&#xff09;&#xff1a;设计一个人工任务流程并配置表单 在本节中&#xff0c;您将学习如何使用 BPMN 2.0 排他网关&#xff08;Exclusive Gateways&#xff09;使流程更加动态。 1、添加两个网关 我们想修改我们的…

新版Java面试专题视频教程——框架篇

新版Java面试专题视频教程——框架篇 框架篇 01-框架篇介绍02-Spring-单例bean是线程安全的吗03-Spring-AOP相关面试题04-Spring-事务失效的场景05-Spring-bean的生命周期5.1 BeanDefinition 06-Spring-bean的循环依赖(循环引用)6.1 一般对象的循环依…

[AudioRecorder]iPhone苹果通话录音汉化破解版-使用巨魔安装-ios17绕道目前还不支持

首先你必须有巨魔才能使用&#xff01;&#xff01; 不会安装的&#xff0c;还没安装的移步这里&#xff0c;ios17 以上目前装不了&#xff0c;别看了&#xff1a;永久签名 | 网址分类目录 | 路灯iOS导航-苹果签名实用知识网址导航-各种iOS技巧-后厂村路灯 视频教程 【Audio…

重学Java 17.面向对象.5.方法参数和快速生成debug

不走心的努力&#xff0c;都是在敷衍自己 ——24.2.19 一、方法参数 1.基本数据类型 整型 byte short int long 浮点型 float double 字符型 char 布尔型 boolean 2.基本数据类型做方法参数传递 基本类型做方法参数传递&a…

消息队列-RabbitMQ:MQ作用分类、RabbitMQ核心概念及消息生产消费调试

1、MQ 的相关概念 1&#xff09;什么是 MQ MQ (message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互…

[杂记]mmdetection3.x中的数据流与基本流程详解(数据集读取, 数据增强, 训练)

之前跑了一下mmdetection 3.x自带的一些算法, 但是具体的代码细节总是看了就忘, 所以想做一些笔记, 方便初学者参考. 其实比较不能忍的是, 官网的文档还是空的… 这次想写其中的数据流是如何运作的, 包括从读取数据集的样本与真值, 到数据增强, 再到模型的forward当中. 0. MMDe…

新增长100人研讨会:快消零售专场探讨招商加盟数字化转型实战

2024年2月2日下午&#xff0c;一场由纷享销客与杨国福集团联合主办的招商加盟数字化转型研讨会在上海成功举办。本次研讨会汇聚了众多快消零售业界的领军人物&#xff0c;共同探讨行业未来的新增长点。 会议伊始&#xff0c;杨国福集团数字化中心负责人王林林发表了主题演讲&a…

三防平板丨手持工业平板丨ONERugged工业三防平板丨推动数字化转型

随着科技的发展&#xff0c;数字化转型已经成为企业转型升级的必由之路。而在数字化转型中&#xff0c;三防平板作为一种重要的工具&#xff0c;可以极大地推动企业的数字化转型。本文将从以下几个方面探讨三防平板如何推动数字化转型。 一、提高工作效率 ONERugged加固平板的…

Android 11.0 mtp在锁屏模式和息屏时禁止访问mtp文件夹功能实现

1.前言 在11.0的系统rom产品定制化开发中,由于系统对于mtp模式访问文件夹没有限制,就是在锁屏息屏状态下也是可以访问文件夹的,由于产品的需要 要求在锁屏和息屏的情况下,禁止访问文件夹,就是需要实现如图效果 2.mtp在锁屏模式和息屏时禁止访问mtp文件夹功能实现的核心…

搜索算法(算法竞赛、蓝桥杯)--BFS八数码难题、抓住那头牛、魔板问题

1、B站视频链接&#xff1a;B14 BFS 八数码难题_哔哩哔哩_bilibili 题目链接&#xff1a;八数码难题 - 洛谷 #include <bits/stdc.h> using namespace std; char c; string str; unordered_map<string,int> d;//记录步数 queue<string> q; int dx[4]{-1,0,1…

使用【Python+Appium】实现自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 Redirecting 点击下载按钮会到GitHub的…