Joh*_*son 0 vue.js vue-component vuejs2 vee-validate
版本
VueJs:2.3.3
Vee验证:2.0.0-rc.25
说明
我有一个自定义组件。这是带有字符计数器的输入,我尝试在此输入中放入vee-validate。我想在提交表单时显示错误。我遵循vee-validate文档中的每个步骤,但是没有用。我的表单提交时忽略了任何输入错误。
重现步骤:
使用vee-validate
代码创建一个自定义组件
:
Parent.vue
<vue-input maxlength="20" minlength="3" placeholder="works"
validate="required|numeric" v-model="dataItem.teste" name="teste"></vue-input>
Run Code Online (Sandbox Code Playgroud)
Component.js
Vue.component('vue-input', {
props: ['maxlength', 'minlength', 'placeholder', 'validate', 'value', 'name'],
template: `<div>
<div class="input-group">
<input type="text" :name="name" :value="value"
@input="$emit('input', $event.target.value);
counter = $event.target.value.length"
:maxlength="maxlength" :placeholder="placeholder"
v-validate="validate"
:class="{'is-danger': errors.has(name), 'form-control' : true}">
Erros: {{errors}}
<span class="input-group-addon">
{{ maxlength - counter }}
</span>
<span v-show="errors.has(name)" class="text-danger m-t-xs">
{{ errors.first(name) }}
</span>
</div>
</div>`,
data: () => ({
counter: 0
})
});
Run Code Online (Sandbox Code Playgroud)
您可以$validator在子组件中使用父项。
请参阅子项中的created()钩子:
童装
<template>
<div>
<div class="input-group">
<input
type="text"
:name="name"
:value="value"
@input="handleInput"
:maxlength="maxlength"
:placeholder="placeholder"
v-validate="validate"
:class="{'is-danger': $errors.has(name), 'form-control' : true}"
>
Errors: {{ $errors }}
<span class="input-group-addon">
{{ maxlength - counter }}
</span>
<span v-show="$errors.has(name)" class="text-danger m-t-xs">
{{ $errors.first(name) }}
</span>
</div>
</div>
</template>
<script>
export default {
name: 'Temp',
props: ['maxlength', 'minlength', 'placeholder', 'validate', 'value', 'name'],
data: () => ({
counter: 0
}),
methods: {
handleInput (event) {
this.$emit('input', event.target.value)
this.counter = event.target.value.length
}
},
created () {
this.$validator = this.$parent.$validator
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
亲子
<children
maxlength="20"
minlength="3"
placeholder="works"
validate="required|numeric"
v-model="dataItem.teste"
name="teste"
></children>
Run Code Online (Sandbox Code Playgroud)
有2个更好的支持解决方案,但你需要移动<span>与验证的Parent.vue组件,因为errors/ $validator将不的可用Children.vue组件。
另外,我是不是能够有多个输入组件,在相同的形式相同的名字,但你可以看看他们,并对其进行测试:
解决方案1
您可以使用Vue的提供/注入API:
童装
export default {
inject: ['$validator'],
// ...
}
Run Code Online (Sandbox Code Playgroud)
解决方案2
使用VeeValidate的构造函数选项:
童装
export default {
$_veeValidate: {
// value getter
value () {
return this.value
},
// component name getter
name () {
return 'children'
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3392 次 |
| 最近记录: |