我正在尝试在自定义输入组件中使用 VeeValidate。
我尝试使用$emit
on @input
,@blur
但验证发生在下一个刻度上,我最终未能捕捉到事件的验证。
onEvent (event) {
console.log('error length', this.errors.items.length)
if (this.errors.items.length) {
this.hasError = true
this.$emit('has-error',this.errors.items)
} else {
this.hasError = false
this.$emit('on-input', event)
}
}
我还尝试从父级注入验证器,以便能够直接访问错误计算属性,但父页面和自定义输入组件本身之间可能存在 1-2-3 级嵌套。我必须通过所有这些注入验证器,并且这些组件是可重用的。
export default {
//in custom input component
inject: ['$validator'],
}
我得到的最好的想法是观察错误计算属性,并在组件实例中的错误发生更改时发出一个事件。
watch: {
errors: function (errorsNew) {
console.log('errors watch',errorsNew)
}
},
问题是我似乎看不到 vee-validate 引入的错误计算属性。
一些简化版本的代码:
父母
<template>
<div id="app">
<CustomInput
:label="'Lable1'"
:value="'value from store'"
:validations="'required|max:10|min:5'"
:name="'lable1'"
/>
<button>Save</button>
</div>
</template>
<script>
import CustomInput from "./components/CustomInput";
export default {
name: "App",
components: {
CustomInput
}
};
</script>
自定义输入
<template>
<div>
<label >{{ label }}</label>
<input :value="value" :name="name" v-validate="validations">
<span v-if="this.errors.items.length">{{this.errors.items[0].msg}}</span>
</div>
</template>
<script>
export default {
name: "HelloWorld",
props: {
label: {
type: String,
required: true
},
value: {
type: String,
default: ""
},
validations: {
type: String,
default: ""
},
name: {
type: String,
required: true
}
},
watch: {
errors: function(errorsNew) {
console.log("errors watch", errorsNew);
this.$emit('has-error')
}
}
};
</script>
有人可以帮我从自定义输入中访问验证错误吗?
更新
如果有人发现更容易测试它,我创建了一个简单的小提琴https://codesandbox.io/s/mqj9y72xx