vue+element 封装日期范围组件(双向绑定)

        像这样的日期组件,在后台管理项目中是比较多的,而且加了快捷选项,代码量较多,因此封装成组件。

        封装这一类型的组组件,主要是了解输入框双向绑定 v-model 的过程。

1、了解输入框双向绑定的过程:

官网:表单输入绑定 — Vue.js

  • 输入文本框:
    • 输入框的双向绑定 v-model,实际上是一个语法糖,等价于:
      • value="uname"

        @input="uname=$event.target.value"

    • 示例:Vue组件封装 ——input 输入框组件_黑猫了个怪怪的博客-CSDN博客_vue输入框
  • 基础表单类型:
    • 不同的表单元素 v-model 在内部绑定的事件也不同:
      • text 和 textarea 元素使用 value property 和 input 事件;
      • checkbox 和 radio 使用 checked property 和 change 事件;
      • select 字段将 value 作为 prop 并将 change 作为事件。
  • 自定义组件的 v-model:
    • HTML 原生的输入元素类型并不总能满足需求。幸好,Vue 的组件系统允许你创建具有完全自定义行为且可复用的输入组件。这些输入组件甚至可以和 v-model 一起使用!具体使用方法如下:
    •  要了解更多,请参阅组件指南中的自定义输入组件。

2、代码

        官网——props验证:Prop — Vue.js

        了解以上 v-model 绑定的原理以及 props验证关系 之后,封装这个组件就简单多了。根据 ELement 文档 可以知道,这个组件双向绑定配合的事件是 change,接下来就开始编写代码,父子组件通讯的字段按照自己的需求通过 props 来绑定即可。

2.1 子组件

        在 components 文件夹下新建一个文件用来写子组件,我这里的路径是:@/components/selects/daterange.vue,复制以下代码:

<template><el-date-picker v-model="dataRange" @change="changeDaterange"type="daterange" unlink-panels format="yyyy-MM-dd"range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd":picker-options="pickerOptions" :align="align"></el-date-picker>
</template><script>
export default {name: "daterange",model:{prop: 'value',  event: 'change'    // 触发父组件中v-model绑定的属性发生改变的方法,名称自取},props:{//双向绑定的值 valuevalue: { type:[String,Array,Date], required: true, default: "" },align: {type: String, default: "center"}},data(){return {pickerOptions: {shortcuts: [{text: '最近一周',onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);picker.$emit('pick', [start, end]);}}, {text: '最近一个月',onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);picker.$emit('pick', [start, end]);}}, {text: '最近三个月',onClick(picker) {const end = new Date();const start = new Date();start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);picker.$emit('pick', [start, end]);}}]},dataRange: this.value}},methods:{changeDaterange(val){let result = val?val: ""; //清空时值为null,在这里判断一下,否则会报错this.$emit("change", result); }}
}
</script>

        注意:这里双向绑定时不要直接绑定到 props 传递的属性上,否则会报以下错误:

         大概意思是:避免直接改变属性,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于属性值的数据或计算属性。通过props传递给子组件的vModel,不能在子组件内部修改props中的vModel值。

3.2 父组件中使用

<my-daterange :vModel="dateRange"></my-daterange><script>
import myDaterange from "@/components/selects/daterange.vue"
export default {components:{myDaterange},data() {    return {dateRange: "" //日期组件绑定的值,在父组件可以直接拿到进行使用}}
}
</script>

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

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

相关文章

句柄是什么?1

句柄是什么&#xff1f; 1.句柄是什么&#xff1f; 在windows中&#xff0c;句柄是和对象一一对应的32位无符号整数值。对象可以映射到唯一的句柄&#xff0c;句柄也可以映射到唯一的对象。2.为什么我们需要句柄&#xff1f; 更准确地说&#xff0c;是windows需要句柄。w…

用Hystrix保护您的应用程序

在之前的帖子http://www.javacodegeeks.com/2014/07/rxjava-java8-java-ee-7-arquillian-bliss.html中&#xff0c;我们讨论了微服务以及如何使用&#xff08;RxJava&#xff09;的Reactive Extensions编排微服务。 但是&#xff0c;如果一项或多项服务由于已被暂停或引发异常而…

python方法未绑定错误

相信 Python 程序员多多少少都和我一样遇到过 Method Unbound Error&#xff0c;直译过来就是 “方法未绑定错误”&#xff0c;虽然搜索之后知道了使用 classmethod 这样的装饰起后就可以解决问题&#xff0c; 但是一直没有得到完全解惑。 我们知道&#xff0c;Python 是一个动…

若依 从下载到成功运行及打包

官网&#xff1a;http://www.ruoyi.vip/ 目录 一、下载并运行项目 二、关于 若依 接口地址配置 2.1 若依的跨域代理介绍 2.2 配置跨域代理&#xff0c;调用后台接口 2.2.1 配置 后台 ip 地址 2.2.2 页面报“系统接口404”错误 三、打包配置 3.1 打包之后静态资源404…

Windows平台下 找回已丢失的MySql root 用户密码

该随笔供初学MySql者作为参考&#xff0c;本人第一次写博客&#xff0c;欢迎各位大虾拍砖&#xff01; 主要步骤&#xff1a; 1.关闭MySql服务 2.在控制台下键入cd命令&#xff0c;进入MySql的安装目录的Bin目录下 3.键入命令 mysqld --skip-grant-tables(参数大致意思&#xf…

JPA教程:实体映射-第3部分

在上一篇文章中&#xff0c;我展示了两种读取/写入持久实体状态的不同方法-字段和属性。 使用字段访问模式时&#xff0c;JPA使用反射直接从实体的字段读取状态值。 如果我们没有明确指定列名&#xff0c;它将直接将字段名转换为数据库列名。 在属性访问模式下&#xff0c;使用…

uniAPP小程序 子组件使用watch不生效,H5正常,小程序不正常(其实是子组件model选项的问题)

第一次用 uniapp 写小程序&#xff0c;还是遇到挺多问题的。写了一个下拉多选组件&#xff0c;发现同样的代码&#xff0c;在H5上运行效果正常&#xff0c;在小程序上压根不走 watch 。 uniapp官网&#xff1a;【全局配置 | uni-app官网】 看文档 watch 是支持H5、小程序的&…

jQuery EasyUI/TopJUI创建日期时间输入框

jQuery EasyUI/TopJUI创建日期时间输入框 日期时间输入框组件 HTML 和日期输入框类似&#xff0c;日期时间输入框允许用户选择日期和指定的时间并按照指定的输出格式显示。相比日期输入框&#xff0c;它在下拉面板中添加了一个时间微调器。 <div class"topjui-containe…

使用oracle 的 PL/Sql 定时执行一个存储过程

/*使用oracle 的 PL/Sql 定时执行一个存储过程 测试目的&#xff1a;在表 tab 中间隔一分钟插入一条数据 实现方案&#xff1a;1.通过 oracle 中 dbms_job 完成存储过程的定时调用2.在存储过程中完成相应的逻辑操作 脚本说名&#xff1a;以下代码为 dbms_job 操作的基本写法&am…

JPA教程:映射实体–第1部分

在本文中&#xff0c;我将讨论JPA中的实体映射过程。 至于我的示例&#xff0c;我将使用与 我以前的一篇文章中使用的模式相同的模式 。 在前两篇文章中&#xff0c;我解释了如何在Java SE环境中设置JPA。 我不打算为Web应用程序编写安装过程&#xff0c;因为Web上的大多数教程…

table 设置边框

本文引自&#xff1a;https://www.cnblogs.com/leona-d/p/6125896.html 示例代码&#xff1a; <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width…

uniapp小程序 设置自定义导航栏

如下截图&#xff0c;通过 wx.getSystemInfoSync 计算得到的整个导航栏高度&#xff0c;其实是有3个部分的&#xff1a; 黄色&#xff1a;状态栏高度&#xff0c;uniapp文档中有给出&#xff1b;红色&#xff1a;胶囊高度&#xff0c;可以计算得出&#xff1b;绿色&#xff1a;…

linux 下 的串口模拟器 minicom 退出方法

ctrl a &#xff08;或 A&#xff09; 进入 minicom 的配置模式&#xff1a;终端外观上无任何变化&#xff01; 然后按下 z &#xff08;或 Z&#xff09; 方可打开配置帮助界面 然后按下 x &#xff08;或 X&#xff09;退出转载于:https://www.cnblogs.com/jinzhenshui/p/11…

WebSpher 6.1 安装与应用

1. 名词术语解释1.1 名词缩写&#xff1a;1、 WAS&#xff1a; 即IBM公司的应用服务器WebSphere Application Server的简称&#xff1b;2、 ND&#xff1a; 即IBM公司的应用服务器WebSphere Application Server Network Deployment的简称&#xff1b;3、 IHS&#xff1a; 即IBM…

PostCSS 基本用法

1、postcss相关网站 https://www.postcss.com.cn/ https://www.ibm.com/developerworks/cn/web/1604-postcss-css/ 2、介绍 PostCSS 的主要功能只有两个&#xff1a;第一个就是前面提到的把 CSS 解析成 JavaScript 可以操作的 抽象语法树结构&#xff08;Abstract Syntax T…

Akka Notes –演员记录和测试

在前两部分&#xff08; 一 &#xff0c; 二 &#xff09;中&#xff0c;我们简要讨论了Actor以及消息传递的工作方式。 在这一部分中&#xff0c;让我们看一下如何修复并记录我们的TeacherActor 。 概括 这就是我们上一部分中的Actor的样子&#xff1a; class TeacherActor …

vue笔记(二)Vue-class与style、事件、计算属性、数据监听、指令+自定义指令、过滤器

vue官网 一 、class、style操作 二、事件 三、计算属性 四、数据监听、观测 五、指令自定义指令 六、过滤器 一 、class、style操作 官网 1. class使用&#xff1a; &#xff08;1&#xff09;v-bind:class“数据|属性|变量|表达式” &#xff08;2&#xff09;v-bind:class“…

oracle_linux_6_64(bit)上安装oracle11gR2数据库环境快速准备神器oracle-rdbms-server-11gR2-preinstall...

https://blog.csdn.net/nalnait/article/details/81582637?tdsourcetags_pctim_aiomsg https://blog.csdn.net/ljunjie82/article/details/37373595?tdsourcetags_pctim_aiomsg 1、oracle linux上安装oracle数据库环境快速准备介绍 在Linux上安装oracle数据库&#xff0c;…

DevExpress控件之GridControl控件

DevExpress控件之GridControl控件http://blog.sina.com.cn/s/blog_6769068d0100iucx.html1. 设置数据源:string sql "select fid,fname from dual"; DataTable dt DALUse.Query(sql).Tables[0];gridControl1.DataSource dt;*:Daluse是项目数据库连接基类,不用特别…

Vue 中computed 与 methods 区别

1、示例 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv"X-UA-Compatible" cont…