this.$refs.myForm.validate不是vue组件中的函数

omvjsjqw  于 2023-05-18  发布在  Vue.js
关注(0)|答案(1)|浏览(218)

这些规则会起作用并显示正确的验证消息。当this.valid为false时,该按钮将被禁用。checkTextBoxValidation方法会对每个输入调用以检查myFormref中的验证。一旦它试图验证我得到标题中的错误。因此,这.valid不会改变。

checkTextBoxValidation() {
        console.log('check v-text-box validation');
        this.valid = !!(this.$refs.myForm as Vue & {
          validate: () => Promise<boolean>
        }).validate();
        console.log('valid:', this.valid);
      },
<v-form ref='myForm' @submit.prevent='submit(idx, fpIdx)'>
                <v-row>
                  <v-col sm='7'>
                    <v-text-field label='Enter Value'
                                  v-model='subHeader.updateAmount'
                                  :rules='[...rules.currencyValue, ...rules.required]'
                                  required
                                  @input='checkTextBoxValidation'
                    ></v-text-field>
                  </v-col>
                  <v-col sm='5' class='mt-2'>
                    <v-btn rounded
                           color='primary'
                           type='submit'
                           :disabled='!valid'
                    >{{ SUBMIT_LABEL }}
                    </v-btn>
                  </v-col>
                </v-row>
              </v-form>

我也试过this.valid = (this.$refs.myForm as HTMLFormElement).checkValidity();,得到了这个。$refs.myForm.checkValidity不是函数

kwvwclae

kwvwclae1#

当我把你的代码放到操场上时,它就能工作了,所以我猜你的错误发生在别的地方。您是否在安装组件之前从其他地方运行该函数?
请注意,.verify()返回一个promise,所以!!this.$refs.myForm.validate()将始终为true(因为promise不是一个假值)。
总而言之,你可能更好地绑定到VForm的modelValue

<v-form @update:modelValue="isValid => valid = isValid || isValid === null">

(note如果表单有效但validate-on事件尚未发生,则从update返回的值将为null)

相关问题