vue.js - VueJS v-validate方法在传递到组件后无法操作
问题描述
更清晰的问题: 如何让附加到错误对象的方法在 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
属性中正确地看到它。
解决方案
您应该将验证器注入您的子组件。不需要道具或传递错误。
<script>
export default {
name: "field",
inject: {
$validator: '$validator'
},
}
<script>
推荐阅读
- c# - EventstoreDb -- AppendToStreamAsync “挂起”。为什么?
- caching - 缓存,你如何处理陈旧的数据
- python - 根据分组数据框中组的前两个值获取数据框
- python - 一组条纹(带有扭曲)
- django - 如果在使用客户端凭据的 Oauth2 请求期间用户为无,则 Django Rest Framweork 中的节流
- xml - 如何在 GAS 中将 XML 路径拆分为数组
- contract - 添加合同托盘时出错
- dataset - 如何在研究论文中提及私人(他人收集的)数据集
- c++ - 迷宫中的鼠标 - 堆栈(但也计算步数)
- path - Python:在 python 程序中使用正斜杠 (/) 和反斜杠 (\) 的路径