如何使用 vue/Quasar 进行日期范围验证
How do a date range validation with vue/Quasar
我尝试在组件中创建一个带有控件的日期范围
Vue.component('FraisHebergement', {
template: '<div class="q-pt-xs">
<div class="q-pt-xs row">\
<template>\
<q-input filled v-model="model.date" :rules="ConfirmDateRange" label="Date début" class="td25pc q-pr-xs" ref="dtedeb">\
<template v-slot:append>\
<q-icon name="event" class="cursor-pointer">\
<q-popup-proxy ref="qDateProxy" transition-show="scale" transition-hide="scale">\
<q-date v-model="model.date" mask="DD/MM/YYYY" @input="() => $refs.qDateProxy.hide()" :locale="myLocale"/>\
</q-popup-proxy>\
</q-icon>\
</template>\
</q-input >\
</template ><template>\
<q-input filled v-model="model.dateFin" :rules="ConfirmDateRange" label="Date Fin" class="td25pc" ref="dtefin">\
<template v-slot:append>\
<q-icon name="event" class="cursor-pointer">\
<q-popup-proxy ref="qDateProxyf" transition-show="scale" transition-hide="scale">\
<q-date v-model="model.dateFin" mask="DD/MM/YYYY" @input="() => $refs.qDateProxyf.hide()" :locale="myLocale"/>\
</q-popup-proxy>\
</q-icon>\
</template>\
</q-input >\
</template>\
<q-input input-class="text-right" filled ></q-input >\</div>\
<q-btn class="q-mt-sm" label="Reset Validation" @click="reset" color="primary"/><div class="row q-pt-xs"> \
</div></div>',
computed: {
ConfirmDateRange() {
return [
(v) => !!v || "Saisissez quelque chose :-)",
(v) => regex.test(v) || "Format de date à utiliser: JJ/MM/AAAA",
(v) => this.model.dateFin > this.model.date || "Date incohérente"
]
}
},
data: function () {
return {
model: {
date: Quasar.utils.date.formatDate(Date.now(), 'DD/MM/YYYY'), dateFin: ''
},
myLocale: {
days: 'Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi'.split('_'),
daysShort: 'Dim_Lun_Mar_Mer_Jeu_Ven_Sam'.split('_'),
months: 'Janvier_Fevrier_Mars_Avril_Mai_Juin_Juillet_Aout_Septembre_Octobre_Novembre_Decembre'.split('_'),
monthsShort: 'Janv_Fevr_Mars_Avr_Mai_Juin_Juil_Aout_Sept_Oct_Nov_Dec'.split('_'),
firstDayOfWeek: 1
},
natures: [],
}
},
methods: {
reset() {
this.$refs.dtedeb.resetValidation(); this.$refs.dtefin.resetValidation()
}
}
});
所有控件都可以,但我想使用 q-input 的 resetValidation 函数来重置 2 个日期和应用规则后的错误。因为我把开始日期设置得比结束日期大:错误出现在开始日期。但如果我更改结束日期,我的旧错误将保留在开始日期。
我放了一个按钮来重置...但我想要一个自动系统
感谢您的帮助
我认为通过使用 watch
属性,可以解决您的问题
watch: {
model: {
handler() {
this.reset();
},
deep: true,
}
}
不知道行不行,可以根据你的数据适配
deep: true
允许您继承对象其他属性的方法
https://vuejs.org/v2/guide/computed.html#Watchers
再见
编辑 11/12
这里是手表属性的例子
谢谢,我没看清楚。我刚开始使用 Vue。
我找到了另一种更简单的方法。使用规则。
resetValidation 是一个函数 return void 然后我就这样先调用它
ConfirmDateRange() {
return [
(v) => (this.$refs.dtedeb.resetValidation()|| this.$refs.dtefin.resetValidation() || !!v) || "Saisissez quelque chose :-)",
(v) => regex.test(v) || "Format de date à utiliser: JJ/MM/AAAA",
(v) => this.model.dateFin > this.model.date || "Date incohérente"
]
}
现在可以了
希望能帮到别人:-)
目前有一个big issue open, for now I recommend use vcalendar.io
我尝试在组件中创建一个带有控件的日期范围
Vue.component('FraisHebergement', {
template: '<div class="q-pt-xs">
<div class="q-pt-xs row">\
<template>\
<q-input filled v-model="model.date" :rules="ConfirmDateRange" label="Date début" class="td25pc q-pr-xs" ref="dtedeb">\
<template v-slot:append>\
<q-icon name="event" class="cursor-pointer">\
<q-popup-proxy ref="qDateProxy" transition-show="scale" transition-hide="scale">\
<q-date v-model="model.date" mask="DD/MM/YYYY" @input="() => $refs.qDateProxy.hide()" :locale="myLocale"/>\
</q-popup-proxy>\
</q-icon>\
</template>\
</q-input >\
</template ><template>\
<q-input filled v-model="model.dateFin" :rules="ConfirmDateRange" label="Date Fin" class="td25pc" ref="dtefin">\
<template v-slot:append>\
<q-icon name="event" class="cursor-pointer">\
<q-popup-proxy ref="qDateProxyf" transition-show="scale" transition-hide="scale">\
<q-date v-model="model.dateFin" mask="DD/MM/YYYY" @input="() => $refs.qDateProxyf.hide()" :locale="myLocale"/>\
</q-popup-proxy>\
</q-icon>\
</template>\
</q-input >\
</template>\
<q-input input-class="text-right" filled ></q-input >\</div>\
<q-btn class="q-mt-sm" label="Reset Validation" @click="reset" color="primary"/><div class="row q-pt-xs"> \
</div></div>',
computed: {
ConfirmDateRange() {
return [
(v) => !!v || "Saisissez quelque chose :-)",
(v) => regex.test(v) || "Format de date à utiliser: JJ/MM/AAAA",
(v) => this.model.dateFin > this.model.date || "Date incohérente"
]
}
},
data: function () {
return {
model: {
date: Quasar.utils.date.formatDate(Date.now(), 'DD/MM/YYYY'), dateFin: ''
},
myLocale: {
days: 'Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi'.split('_'),
daysShort: 'Dim_Lun_Mar_Mer_Jeu_Ven_Sam'.split('_'),
months: 'Janvier_Fevrier_Mars_Avril_Mai_Juin_Juillet_Aout_Septembre_Octobre_Novembre_Decembre'.split('_'),
monthsShort: 'Janv_Fevr_Mars_Avr_Mai_Juin_Juil_Aout_Sept_Oct_Nov_Dec'.split('_'),
firstDayOfWeek: 1
},
natures: [],
}
},
methods: {
reset() {
this.$refs.dtedeb.resetValidation(); this.$refs.dtefin.resetValidation()
}
}
});
所有控件都可以,但我想使用 q-input 的 resetValidation 函数来重置 2 个日期和应用规则后的错误。因为我把开始日期设置得比结束日期大:错误出现在开始日期。但如果我更改结束日期,我的旧错误将保留在开始日期。 我放了一个按钮来重置...但我想要一个自动系统 感谢您的帮助
我认为通过使用 watch
属性,可以解决您的问题
watch: {
model: {
handler() {
this.reset();
},
deep: true,
}
}
不知道行不行,可以根据你的数据适配
deep: true
允许您继承对象其他属性的方法
https://vuejs.org/v2/guide/computed.html#Watchers
再见
编辑 11/12
这里是手表属性的例子
谢谢,我没看清楚。我刚开始使用 Vue。 我找到了另一种更简单的方法。使用规则。 resetValidation 是一个函数 return void 然后我就这样先调用它
ConfirmDateRange() {
return [
(v) => (this.$refs.dtedeb.resetValidation()|| this.$refs.dtefin.resetValidation() || !!v) || "Saisissez quelque chose :-)",
(v) => regex.test(v) || "Format de date à utiliser: JJ/MM/AAAA",
(v) => this.model.dateFin > this.model.date || "Date incohérente"
]
}
现在可以了 希望能帮到别人:-)
目前有一个big issue open, for now I recommend use vcalendar.io