简体   繁体   English

如何将一个 Vue 组件中的所有字段与另一个组件一起验证(使用 Vee-Validate)?

[英]How to validate all fields in one Vue-component with another components together (using Vee-Validate)?

I use Vue.js 2.5.13 + Vee-Validate 2.0.3 .我使用 Vue.js 2.5.13 + Vee-Validate 2.0.3 My code structure is:我的代码结构是:

./component-one.vue : ./component-one.vue

<template>
  <div>

    <input type="text" name="input_one" id="input_one"
           v-model="input_one" 
           v-validate="'required'"
           :class="{'is-danger': errors.has('input_one')}" />

    <component-two></component-two>

    <button @click="submitForm">Submit!</button>

  </div>
</template>

<script>
  import Vue from 'vue'
  import VeeValidate from 'vee-validate'
  import ComponentTwo from './component-two.vue'

  Vue.use(VeeValidate, {
    events: 'input|blur'
  })

  export default {
    name: "component-one",
    components: {
      ComponentTwo
    },
    data() {
      return {
        input_one: '',
      }
    },
    methods: {
      submitForm: function () {
        // Validate before submit form
        this.$validator.validateAll().then((result) => {
          if (result) {
            alert('From Submitted!')
            return
          }
          alert('Correct them errors!')
        })
      }
    }
  }
</script>

./component-two.vue : ./component-two.vue

<template>
  <div>

    <input type="text" name="input_two" id="input_two"
           v-model="input_two" 
           v-validate="'required'"
           :class="{'is-danger': errors.has('input_two')}" />

  </div>
</template>

<script>
  export default {
    name: "component-two",
    data() {
      return {
        input_two: ''
      }
    }
  }
</script>

How to validate field from ComponentTwo , when I click to button @click="submitForm" in ComponentOne (for save all form data at this component).如何从验证领域ComponentTwo ,当我点击button @click="submitForm"ComponentOne (用于保存在此组件的所有形式的数据)。

I have huge form, who made by similar small Vue-components (all collected in ComponentOne ), would be great to validate all of them in one place.我有一个巨大的表单,由类似的小型 Vue 组件(全部收集在ComponentOne )制作,非常适合在一个地方验证所有这些。

You can trigger validateAll() on the component manually trough vue reference, like:您可以通过 vue 引用手动触发组件上的 validateAll() ,例如:

parent component父组件

<template>
  <div>

    <input type="text" name="input_one" id="input_one"
           v-model="input_one" 
           v-validate="'required'"
           :class="{'is-danger': errors.has('input_one')}" />

    <component-two ref="validateMe"></component-two>

    <button @click="submitForm">Submit!</button>

  </div>
</template>

<script>
  import Vue from 'vue'
  import VeeValidate from 'vee-validate'
  import ComponentTwo from './component-two.vue'

  Vue.use(VeeValidate, {
    events: 'input|blur'
  })

  export default {
    name: "component-one",
    components: {
      ComponentTwo
    },
    data() {
      return {
        input_one: '',
      }
    },
    methods: {
      submitForm: async function () {
        // Validate before submit form
        const result = await this.$validator.validateAll() && await this.$refs.validateMe.$validator.validateAll()
        if (result) {
          alert('From Submitted!')
          return
        }
        alert('Correct them errors!')
      }
    }
  }
</script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM