传入组件后,VueJS v验证方法无法操作

时间:2019-06-28 19:00:43

标签: vue.js 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属性中看到它。

1 个答案:

答案 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;
        }
    }      
}