el-select和date-picker数据联动效果

在很多项目中都要求通过select选择一个时间点,date-picker渲染用户选择的时间范围,主要效果如下图所示:

但是在做的过程中可能会很多问题,最让人头疼的是双向数据绑定,数据层更新了,视图层不能同步更新的问题。

首先先分享本demo的代码:

<template>
	<div class="home">
		<template class="select">
			<el-select v-model="choseValue" placeholder="请选择" @change="getFormateDay">
				<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
				</el-option>
			</el-select>
		</template>
		<span class="demonstration" style="padding-left:30px">请选择时间:</span>
		<el-date-picker v-model="dates" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd">
		</el-date-picker>
	</div>
</template>

<script>
export default {
	name: 'Home',
	data() {
		return {
			// select的默认值
			choseValue: '2',
			// 选择的时间
			dates: [],
			// select 的选项
			options: [
				{
					value: '1',
					label: '今日'
				},
				{
					value: '2',
					label: '近一周'
				},
				{
					value: '3',
					label: '近一个月'
				}
			]
		}
	},
	methods: {
		fun_date(aa) {
			var date1 = new Date()
			date1.getFullYear() + '-' + (date1.getMonth() + 1) + '-' + date1.getDate() // time1表示当前时间
			var date2 = new Date(date1)
			date2.setDate(date1.getDate() + aa)
			var time2 = date2.getFullYear() + '-' + (date2.getMonth() + 1) + '-' + date2.getDate()
			return time2
		},
		// 初始化时间
		Init() {
			this.dates[0] = this.fun_date(-7)
			this.$set(this.dates, 0, this.dates[0])
			this.dates[1] = this.fun_date(0)
			this.$set(this.dates, 1, this.dates[1])
		},
		// 根据选择的value来渲染时间
		getFormateDay() {
			if (this.choseValue === '1') {
				this.dates[0] = this.fun_date(0)
				this.$set(this.dates, 0, this.dates[0])
				this.dates[1] = this.fun_date(0)
				this.$set(this.dates, 1, this.dates[1])
			} else if (this.choseValue === '3') {
				this.dates[0] = this.fun_date(-30)
				this.$set(this.dates, 0, this.dates[0])
				this.dates[1] = this.fun_date(0)
				this.$set(this.dates, 1, this.dates[1])
			}
		}
	},
	// 初始化给一个默认的时间
	created() {
		this.Init()
	}
}
</script>
<style scoped>
</style>

解决双向数据绑定中数据层更新视图层不同步更新的问题:

 本demo中,date-picker绑定的是一个数组。在查资料的时候尝试过date.push()方法,和date[0]=某一个值,date[1]=某一个值,从控制台可以看到数据已经发生了改变,但是视图层仍然没有更新,后面尝试过this.$forceUpdate()强制刷新,但是还是没使视图层更新。

最终解决的方式是:this.$set()

this.$set()的功能是向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新

第一个参数表示的是对象,第二个参数表示的是更新的位置,第三个参数表示的是更新后的值

至此,问题就解决了。

温馨提示:选择了某个选项,且视图层强制更新后还没更新date-picker的值,此时就该检查el-select是否绑定了一个@change事件,以本demo为例,我的el-select上应该加上@change="getFormateDay" 

 

el-table是Element UI中的一个表格组件,el-date-pickerElement UI中的一个日期选择器组件。它们都是基于Vue.js开发的。 el-table可以用于展示数据,并提供了丰富的功能和配置选项,例如排序、筛选、分页等。你可以通过设置不同的属性和事件来自定义表格的样式和行为。 el-date-picker可以用于选择日期,它支持多种日期格式和快捷选项,同时也可以自定义日期范围和禁用某些日期。 以下是一个使用el-table和el-date-picker的示例: ```html <template> <div> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> <el-table-column prop="birthday" label="生日"></el-table-column> </el-table> <el-date-picker v-model="selectedDate" type="date" placeholder="选择日期"></el-date-picker> </div> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, gender: '男', birthday: '1990-01-01' }, { name: '李四', age: 20, gender: '女', birthday: '1992-05-10' }, { name: '王五', age: 22, gender: '男', birthday: '1995-09-20' }, ], selectedDate: '' }; } }; </script> ``` 在上面的示例中,我们使用el-table展示了一个包含姓名、年龄、性别和生日的表格,并使用el-date-picker选择日期。你可以根据自己的需求进行进一步的配置和样式调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值