微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vee 验证 Nuxt JS 属性或方法“必需”未在实例上定义,但在渲染期间被引用

如何解决Vee 验证 Nuxt JS 属性或方法“必需”未在实例上定义,但在渲染期间被引用

我是 Vue 和 Nuxt 的新手,我似乎无法克服这个错误

[Vue 警告]:属性方法“必需”未在实例上定义但在渲染期间引用

这是源代码

vee-validate.js :

import Vue from 'vue'
import {ValidationProvider,ValidationObserver,extend} from 'vee-validate'
import {required,email} from 'vee-validate/dist/rules'
Vue.component('ValidationProvider',ValidationProvider)
Vue.component('ValidationObserver',ValidationObserver)

extend('required',{
    ...required,message:'This field is required'
})


extend('email',{
    ...email,message:'This field is required'

})

对于表格:

<template>
  <div>
    <div class="col-6 pr-2">
      <label for="name">*Name </label> <br />
      <ValidationObserver>
        <ValidationProvider v-slot="{ errors }" mode="passive" rules="required">
          <input id="name" v-model="required" type="text" name="name" placeholder="Your name" />
          <span class="validation-span">{{ errors[0] }}</span>
        </ValidationProvider>
      </ValidationObserver>
    </div>
    <div class="col-6 pr-2">
      <label for="company">Company</label> <br />
      <input id="company" type="text" label="Company" placeholder="Name of your company" />
      <br />
    </div>
    <div class="col-6 pr-2">
      <br />
      <ValidationObserver>
        <ValidationProvider v-slot="{ errors }" mode="passive" rules="required|email">
          <label for="email">*Email</label> <br />
          <input id="email" v-model="email" type="email" placeholder="example@email.com" /> <br />
          <span class="validation-span">{{ errors[0] }}</span>
        </ValidationProvider>
      </ValidationObserver>
    </div>
  </div>
</template>

解决方法

我们的团队就是这样做的。

/utils/vee-validate-rules.js

import { extend } from 'vee-validate'
import { email as defaultEmail,required as defaultRequired } from 'vee-validate/dist/rules'

const email = extend('email',{
  ...defaultEmail,})

const required = extend('required',{
  ...defaultRequired,})


export { extend,email,required }

一些 .vue 文件

<script>
import { extend,required,email } from '~/utils/vee-validate-rules'

export default {
  beforeCreate() {
    extend('required',{ ...required,message: this.$t('veeValidate.required') })
    extend('email',{ ...email,message: this.$t('veeValidate.email') })
  },}
</script>

到目前为止效果很好。在 i18n 方面可以做得更好。

另外,也不要忘记转译它

nuxt.config.js

build: {
  transpile: ['vee-validate/dist/rules']
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。