更清楚的问题: 如何获取附加到错误对象的方法以在v-validate所运行的组件内部工作?
更长的问题:
我设置了v-validate来处理包含输入的组件。
除了组件内的errors
对象无法正常运行之外,它实际上运行良好。只要更改父级中的errors
对象,我就可以看到它反映在errors.items
属性中-表单中的所有错误都存在。但是这些方法不起作用-this.errors.count()
始终返回零,this.errors.collect(this.name)
始终返回空数组。
this.errors.list
对象上的name属性与组件中的this.name
相匹配。即使使用硬编码字符串代替this.name
也没有效果。
我的想法是有某种内部引用可以保留这些方法,也许与VueJS道具有关?
短版代码:
<myinput v-validate="'required'" v-model="name" :name="name"></myinput>
<template>
<div>
<input
:value="value"
@input="updateValue()"
ref="input"
:name="name"
type="text"
/>
<p v-for="error in errorMessages" :key="error.zerp">{{ error }}</p>
</div>
</template>
props: [
"name",
"value",
],
computed: {
errorMessages : function(){
//this.errors.list has the errors
//collect function always returns empty array []
console.log(this.errors, this.error.collect(this.name));
return this.errors ? this.errors.collect(this.name) : [];
}
}
更多信息:
看着调试器中的ErrorBag.prototype.collect
方法,this.items确实具有我期望看到的集合。我还没有弄清楚它如何不从名称中获得正确的最终集合,我也可以正确地在field
属性中看到它。
答案 0 :(得分:1)
您应该将验证器注入子组件。无需道具或传递错误。
$limit = count($temperatures);
for ($i = 0; $i <= limit; $i++) {
$next_is_number = false;
if (is_null($temperatures[i]) {
$gap = true;
} else {
for ($y = $i + 1; $i <= limit; $i++) {
if (is_null($temperatures[$y]) {
break;
} elsif (is_numeric($temperatures[$y]) {
$next_is_number = true;
break;
}
}
if ($next_is_number) {
$gap = false;
} else {
$gap = true;
}
}
}