【vue 移动端】 日期选择器的选中值处理

涉及范围

  • 知识点
    nvue、uniapp、uniapp日期选择插件、生命周期、uniapp弹窗插件等
  • 开发工具
    Hbuilder

功能简述

  • 页面有两个日期选择器,点击日期选择器,选择器会通过弹窗插件的特效弹出。用户根据需求选择起始日期和终止日期,点选时弹出的控件会关掉并获取选中值。为了用户体验,起始日期不能大于终止日期。

样图展示

在这里插入图片描述

思路

  • 弹窗插件包裹日期选择插件,在日期选择插件上添加点击事件,点击事件绑定弹窗插件的open事件打开弹窗。
  • 用户点选日期触发日期选择器的change事件,change事件中除了保存选中的日期外还需要添加关闭弹窗事件close。
  • 为了确保每次数据按照点击位置进行定向数据更新,在两个选择器上绑定的open事件方法中携带一个flag数值:open(1);open(2),后续可以通过对flag的数值进行判定选择的数据是起始还是终止日期。
  • 此时还有一个bug,起始日期可以大于终止日期。这个就需要在数值保存时进行判定,如果起始值大于终止值,那么为了用户体验两者的数值应当互换。

部分代码

  • 下面实现了基本的弹窗效果和日期选择
//日期选择器的点击事件,
open(flag){
	this.flag = flag;
	this.$refs.popup.open()  //弹窗插件的open方法,执行打开弹窗
},
//通过flag判断点击的对象,对应更新数据
changeStartDate(e) {
	let flag = this.flag;
	let endDate = this.endDate;
	let startDate = this.startDate;
	if(flag == 1){
		this.$refs.popup.close();
		this.startDate = e.fulldate;
	}else{
		this.$refs.popup.close();
		this.endDate = e.fulldate;
	}		
},
  • 下面解决起始日期大于终止日期的问题,采用vue的updated生命周期对数据更改进行监测。
let startDate = this.startDate;
let endDate = this.endDate;
let date = "";
//这里通过条件控制,当两个日期都是非空条件下 进行比较,如果出现起始日期大于终止日期的情况
//就将两者的数据进行调换。
if(startDate != ""&&endDate != "" ){
	if((startDate > endDate)){
		date = startDate;
		this.startDate = endDate;
		this.endDate = date;
	}
}else{
	return;
}
  • 这是图中使用到的日期插件和弹窗插件的引入:
	import uniCalendar from '@/components/uni-calendar/uni-calendar.vue'
	import uniPopup from '@/components/uni-popup/uni-popup.vue'
	import uniPopupMessage from '@/components/uni-popup/uni-popup-message.vue'
	import uniPopupDialog from '@/components/uni-popup/uni-popup-dialog.vue'
nvue使用rich-text组件是用来展示富文本内容的。富文本内容可以包括文本和图片等元素。在nvue中,可以通过以下几种方式来使用rich-text组件: 1. 在模板中直接使用: ```html <rich-text :nodes="content" style="font-size: 14px;"></rich-text> ``` 在data中定义content的内容,可以是包含HTML标签的字符串,如`<div><p>Hello World</p></div>`。 2. 使用变量绑定: ```html <rich-text :nodes="{{htmlSnip}}"></rich-text> ``` 在data中定义名为htmlSnip的数组,数组的每一项代表一个富文本元素,可以使用HTML标签和相应的属性来描述元素的样式和内容。 3. 在使用template的情况下: ```html <template> <view class="u-content"> <rich-text :nodes="content" style="font-size: 14px;"></rich-text> </view> </template> <script> import htmlParser from '../../common/html-parser' export default { data() { return { content: [] } }, onLoad() { this.initText(); }, methods: { initText() { // 请求回来后的参数,此处模拟一下 const arr = `<div><p>Hello World</p><img src="https://example.com/image.jpg" /></div>`; this.content = htmlParser(arr); } } } </script> ``` 在data中定义content为空数组,然后在onLoad钩子函数中通过请求获取到的富文本内容后,将其解析为nodes数组,再赋给content。 通过以上方式,你可以在nvue中使用rich-text组件来展示富文本内容。注意,rich-text组件在H5端可以正常显示,但在真机调试时可能会出现无法显示的情况,这可能是因为nvue在不同平台上的差异导致的。如果遇到这个问题,你可以尝试使用vue文件来替代nvue文件来展示富文本内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [在nvue中富文本rich-text不显示和图片不显示的解决](https://blog.csdn.net/weixin_45979310/article/details/122997535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【uni-app】rich-text的使用](https://blog.csdn.net/loyd3/article/details/127726045)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值