- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 vuelidate 中遇到导致无限循环的问题。这是我的项目的简要过程。我有一个 datatable
,我使用 Firebase OnSnapShot
函数对表格进行分页。该表具有操作列,单击时将显示模态。当我更新来自表的值时,vuelidate isUnique
函数会触发一个无限循环。
P.S 我在查看模式之前分离监听器
无限循环的输出:
这是我加载数据表
的函数:
async loadData(firebasePagination) {
// query reference for the messages we want
let ref = firebasePagination.db;
// single query to get startAt snapshot
ref.orderBy(firebasePagination.orderColumn, 'asc')
.limit(this.pagination.rowsPerPage).get()
.then((snapshots) => {
// save startAt snapshot
firebasePagination.start = snapshots.docs[snapshots.docs.length - 1]
// create listener using endAt snapshot (starting boundary)
let listener = ref.orderBy(firebasePagination.orderColumn)
.endAt(firebasePagination.start)
.onSnapshot((datas) => {
if(!datas.empty){
datas.docs.forEach((data, index) => {
//remove duplicates
console.log("here")
firebasePagination.data = firebasePagination.data.filter(x => x.id !== data.id)
//push to the data
firebasePagination.data.push(Object.assign({id : data.id },data.data()))
if(datas.docs.length-1 === index){
//sort
firebasePagination.data.sort((a, b) => (a[firebasePagination.orderColumn] > b[firebasePagination.orderColumn]) ? 1 : -1)
//get the current data
firebasePagination.currentData = this.getCurrentData(firebasePagination)
}
})
}
})
// push listener
firebasePagination.listeners.push(listener)
})
return firebasePagination;
}
这是我点击 Action 时的功能(模态):
switch(items.action) {
case 'edit':
//detaching listener
this.firebasePagination.listeners.forEach(d => {
d()
});
items.data.isEdit = true;
this.clickEdit(items.data);
break;
}
}
这是我的 isUnique
函数:
validations: {
department: {
name: {
required,
async isUnique(value){
if(value.trim() === ''){
return false;
}
if(strictCompareStrings(this.departmentName, value)){
this.departmentError.isActive = true;
this.departmentError.isValid = true;
return true;
}
const result = await checkIfUnique(DB_DEPARTMENTS, {nameToLower : this.department.name.toLowerCase()});
console.log("GOES HERE")
if(!result.isValid){
result.errorMessage = result.isActive ?
'Department already exists.' : 'Department has been archived.';
}
this.departmentError = Object.assign({}, result);
return this.departmentError.isValid;
}
}
}
}
这是我的 checkUnique 函数:
export const checkIfUnique = (db, nameObj, isTrim = true) => {
return new Promise(resolve => {
const nameObjKey = Object.keys(nameObj)[0];
const name = isTrim ? nameObj[nameObjKey].replace(/\s+/g,' ').trim().toLowerCase() : nameObj[nameObjKey].trim();
db().where(nameObjKey, '==', name).get()
.then((doc) => {
let result = {isActive: false, isValid: true, errorMessage: ''};
if(!doc.empty){
result.isActive = doc.docs[0].data().isActive;
result.isValid = false;
}
resolve(result);
})
});
};
最佳答案
查看另一个使用来自 here 的 isUnique
的示例并考虑到您可能必须从 isUnique
本身返回 Promise
本身。
isUnique(value) {
if (value === '') return true
return new Promise((resolve, reject) => {
yourQueryMethod(`....`)
.then(result => resolve(result))
.catch(e => reject(false));
})
}
但话又说回来,我们仍然有一个关于 Infinite loop when using a promise-based validate #350 的悬而未决的问题.
关于javascript - Vuelidate isUnique 导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58551915/
如何验证电子邮件? 你能举一个带有错误信息的例子吗? 文档没有提供足够的细节。 似乎没有什么像v-if="!$v.user.email.email" 以下代码也不起作用 validations: {
好的 - 搜索了很长一段时间,但找不到示例或使用 Vuelidate 的 OR 验证器。 this github issue中提到的那个无效,问题在不提供有效 OR 示例的情况下得到解决。 docs
在我们的 Vue 应用程序中,我们使用 Vuelidate用于表单验证。存在这种行为,即在页面呈现时验证字段,而仅应在表单提交中验证字段,如在提交处理中使用 $v.invalid 和 $v.touch
在 vuelidate 中添加可选验证对象的正确方法是什么? 给定验证形状: validations: { vehicles: { $each: { t
我正在为此表单使用 vuelidate 的电子邮件验证器: OnSite Contact Email Please provide a valid On
我正在使用 Vue,为了验证,Vuelidate . 当使用执行 AJAX 调用的自定义验证器时,它会在页面加载时触发多次,甚至在用户交互之前(vuelidate 的 $touch)。 在第一次加载这
我在使用 vuelidate 进行表单验证时遇到问题。我正在使用 Vue 2.9.6 和 vuelidate 0.7.5 我建议在阅读我的问题描述时打开这个 jsfiddle: jsfiddle.ne
我正在尝试结合前端和后端验证。 例如,在用户输入电子邮件的注册表单上,前端有一个 email 验证器,后端有一个 unique 验证器。 如果后端失败,则错误消息将保存到 requestErrorMe
在 Vuejs 中,在遵循 Vuelidate 安装说明 ( https://vuelidate.js.org/#getting-started ) 时,我在以下位置收到警告: 从“vuelidate
我正在尝试使用 vuelidate 验证输入字段。如果以下任一正则表达式为真,我需要它返回有效。 const val1 = helpers.regex('val1', /^\D*7(\D*\d){12
我使用 Bootstrap-Vue 构建了以下表单,其中应用了一些 Vuelidation 代码。 Ple
我正在使用 Vue.js,而且我是新手。我目前正在验证。我曾使用 vuelidate 作为我的验证库。我已经成功地完成了表单验证,但是当我必须检查复选框的验证时出现了问题。 如何检查复选框的验证?另外
我有一个表单,可以根据存储在 VUEX 存储中的参数 action 应用不同的验证。我试试这个: data: function() { const validations = { s
我在 vue 应用程序中有一个表单。 vue2-persian-datepicker 包用于波斯日期字段。我正在尝试使用 vuelidate 验证字段,我的问题是 pdatepicker 组件(来自
如果启用了功能(如果您选择了复选框),我试图让一个字段成为必填字段。但是该验证不会通过单击选择/取消选择复选框来触发 Enable Vue.js validations: {
我在 vuelidate 中遇到导致无限循环的问题。这是我的项目的简要过程。我有一个 datatable,我使用 Firebase OnSnapShot 函数对表格进行分页。该表具有操作列,单击时将显
假设我有一个包含如下数据的 vue 组件: data: () => ({ form: { old_password: { data: '', t
我需要根据元素本身的值来验证列表的元素。 我是否可以或应该为每个产品创建验证? new Vue({ el: "#app", data: { text: '', sons:
我将 VueJS2 与 vuelidate 一起使用图书馆。我可以根据验证对象验证字段。验证将在计算的时间内执行。但是我的验证对象是固定的,而不是动态的。我有一些字段会根据选择隐藏。 import {
如何使用 Vuelidate 对父组件内的嵌套组件进行验证?如果子组件中的输入有效或无效,我想更改 parentForm.$invalid。 家长: validations: {
我是一名优秀的程序员,十分优秀!