vant添加列表, 日期选择总是填充到最后一个组内原因

添加多个行程, 无论在哪个行程上修改时间, 时间总是只显示在最后一个行程里
在这里插入图片描述
错误代码:

<div class="journey">
						<div
							v-for="(item, index) in ruleform.hrms_business_item"
							:key="index">
							<div class="journey-title">
								<span>{{ "行程" + (index + 1) }}</span>
								<van-icon
									name="delete-o"
									size="18"
									color="#323233"
									@click="deltrip($event, index)" />
							</div>
							<van-cell-group inset class="cell journey-toptime">
								<van-field
									class="dispensable"
									v-model="item.startDate"
									label="开始时间"
									placeholder="请选择"
									label-align="top"
									is-link
									name="picker"
									@click="pickerData.showPickerstartDate = true" /><!--主要问题就是 pickerData.showPickerstartDate 控制了组件是否弹出-->
								<timepicker
									:values="item.startDate"
									@changeValue="pickerData.showPickerstartDate = false"
									:showPicker="pickerData.showPickerstartDate"
									@click="onConClick($event, 'startDate', index)"
									@confirm="onConfirmHHMMSS($event, 'startDate', index)"
									@cancelOn="pickerData.showPickerstartDate = false" />

								<van-field
									class="dispensable"
									v-model="item.endDate"
									label="结束时间"
									placeholder="请选择"
									label-align="top"
									is-link
									name="picker"
									@click="pickerData.showPickerendDate = true" />
								<timepicker
									:values="item.endDate"
									@changeValue="pickerData.showPickerendDate = false"
									:showPicker="pickerData.showPickerendDate"
									@confirm="onConfirmHHMMSS($event, 'endDate', index)"
									@cancelOn="pickerData.showPickerendDate = false" />
								<van-field
									class="dispensable"
									v-model="item.note"
									label="备注"
									placeholder="请输入"
									label-align="top"
									type="textarea"
									:autosize="{ maxHeight: 30 }" />
							</van-cell-group>
						</div>
						<div class="journey-plus" @click="addtrip">
							<van-icon name="plus" color="#4B6EF6" />
							<span>添加行程</span>
						</div>
					</div>

主要问题就是 pickerData.showPickerstartDate 控制了组件是否弹出, 讲道理在for循环当中, 利用外部字段控制弹窗是否弹出, 并传递对应下标, 应该是可以正常传递的, 但是这里不行, 必须用item.showPickerstartDate控制弹窗是否打卡关闭.

正确代码:

<div class="journey">
						<div
							v-for="(item, index) in ruleform.hrms_business_item"
							:key="index">
							<div class="journey-title">
								<span>{{ "行程" + (index + 1) }}</span>
								<van-icon
									name="delete-o"
									size="18"
									color="#323233"
									@click="deltrip($event, index)" />
							</div>
							<van-cell-group inset class="cell journey-toptime">
								<van-field
									class="dispensable"
									v-model="item.startDate"
									label="开始时间"
									placeholder="请选择"
									label-align="top"
									is-link
									name="picker"
									@click="item.showPickerstartDate = true" />
								<timepicker
									:values="item.startDate"
									@changeValue="item.showPickerstartDate = false"
									:showPicker="item.showPickerstartDate"
									@click="onConClick($event, 'startDate', index)"
									@confirm="onConfirmHHMMSS($event, 'startDate', index)"
									@cancelOn="item.showPickerstartDate = false" />

								<van-field
									class="dispensable"
									v-model="item.endDate"
									label="结束时间"
									placeholder="请选择"
									label-align="top"
									is-link
									name="picker"
									@click="item.showPickerendDate = true" />
								<timepicker
									:values="item.endDate"
									@changeValue="item.showPickerendDate = false"
									:showPicker="item.showPickerendDate"
									@confirm="onConfirmHHMMSS($event, 'endDate', index)"
									@cancelOn="item.showPickerendDate = false" />
								<van-field
									class="dispensable"
									v-model="item.note"
									label="备注"
									placeholder="请输入"
									label-align="top"
									type="textarea"
									:autosize="{ maxHeight: 30 }" />
							</van-cell-group>
						</div>
						<div class="journey-plus" @click="addtrip">
							<van-icon name="plus" color="#4B6EF6" />
							<span>添加行程</span>
						</div>
					</div>

修改后即可正常回显数据
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用vant4中的DatePicker组件,结合vue3中的响应式数据,实现一个有联动的日期选择器组。具体实现步骤如下: 1. 在vue的setup中定义两个响应式的变量,分别代表开始日期和结束日期。 2. 在模板中使用DatePicker组件,分别绑定开始日期和结束日期的值。 3. 在开始日期的change事件中,更新结束日期的最小值为开始日期的值,确保结束日期不能早于开始日期。 4. 在结束日期的change事件中,更新开始日期的最大值为结束日期的值,确保开始日期不能晚于结束日期。 代码示例: ```vue <template> <div> <van-cell title="开始日期"> <van-date-picker v-model="startDate" type="date" @change="handleStartDateChange" /> </van-cell> <van-cell title="结束日期"> <van-date-picker v-model="endDate" type="date" :min-date="startDate" @change="handleEndDateChange" /> </van-cell> </div> </template> <script> import { reactive } from 'vue' export default { setup() { const state = reactive({ startDate: null, endDate: null }) const handleStartDateChange = (value) => { state.endDate = null // 重置结束日期 // 更新结束日期的最小值 const { minDate } = state.$refs.endDate state.$refs.endDate.updateMinDate(value || minDate) } const handleEndDateChange = (value) => { // 更新开始日期的最大值 const { maxDate } = state.$refs.startDate state.$refs.startDate.updateMaxDate(value || maxDate) } return { ...state, handleStartDateChange, handleEndDateChange } } } ``` 其中,使用了refs来获取DatePicker组件的实例,从而调用updateMinDate和updateMaxDate方法来动态更新最小值和最大值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值