2017-10-10 200 views
1

有谁知道如何在表单验证后将其提交给JSON?使用Vuetify和VE验证提交Vue.js中的表格

这里是我的代码:

Contact.vue

<template> 
    <v-container grid-list-md fluid id="contact"> 
    <v-container grid-list-md> 
     <v-layout row wrap> 
     <v-flex xs12> 
      <h2 class="default-custom-title">contact</h2> 
      <p class="text-description"> 
      Drop a message and we will be in contact soon. 
      </p> 
     </v-flex> 
     </v-layout> 
     <v-layout row wrap> 
     <v-flex xs12> 
      <form v-on:submit.prevent="onSubmit"> 
      <v-layout row wrap> 
       <v-flex xs12> 
       <v-text-field 
        id="name" 
        v-model="name" 
        label="Name" 
        alpha 
        :error-messages="errors.collect('name')" 
        v-validate="'required|alpha'" 
        data-vv-name="name" 
        required> 
       </v-text-field> 
       </v-flex> 
      </v-layout> 
      <v-layout row wrap> 
       <v-flex xs12> 
       <v-text-field 
        id="phone" 
        v-model="phone" 
        label="Phone" 
        numeric 
        :error-messages="errors.collect('phone')" 
        v-validate="'required|numeric'" 
        data-vv-name="phone" 
        required> 
       </v-text-field> 
       </v-flex> 
      </v-layout> 
      <v-layout row wrap> 
       <v-flex xs12> 
       <v-text-field 
        id="email" 
        v-model="email" 
        label="E-mail" 
        :error-messages="errors.collect('email')" 
        v-validate="'required|email'" 
        data-vv-name="email" 
        required 
       ></v-text-field> 
       </v-flex> 
      </v-layout> 
      <v-layout row wrap> 
       <v-flex xs12> 
       <v-text-field 
        id="message" 
        v-model="message" 
        label="Message" 
        :counter="300" 
        :error-messages="errors.collect('message')" 
        v-validate="'required|max:300'" 
        data-vv-name="message" 
        required> 
       </v-text-field> 
       </v-flex> 
      </v-layout> 
      <v-layout row wrap text-xs-right> 
       <v-flex xs12> 
       <v-btn @click="submit" secondary id="btn-submit">submit</v-btn> 
       <v-btn @click="clear" id="btn-clear">clear</v-btn> 
       </v-flex> 
      </v-layout> 
      </form> 
     </v-flex> 
     </v-layout> 
    </v-container> 
    </v-container> 
</template> 


<script> 

export default { 
    name: 'contact', 
    data() { 
    return { 
     name: '', 
     phone: '', 
     email: '', 
     message: '' 
    } 
    }, 
    methods: { 
    submit() { 
     this.$validator.validateAll() 
    }, 
    clear() { 
     this.name = '' 
     this.phone = '' 
     this.email = '' 
     this.message = '' 
     this.$validator.reset() 
    } 
    } 
} 

</script> 
<!-- Add "scoped" attribute to limit CSS to this component only --> 

<style> 

#btn-submit, 
#btn-clear{ 
    margin: 1em 0 0 1em!important; 
} 

@media all and (max-width: 960px) { 
    .text-description { 
    font-weight: 400; 
    font-size: 1.3em; 
    } 
    .light-text { 
     font-weight: 300; 
     font-size: 1.2em; 
    } 
} 
@media all and (max-width: 736px) { 
    .text-description { 
    font-weight: 400; 
    font-size: 1.3em; 
    } 
    .light-text { 
     font-weight: 300; 
     font-size: 1.2em; 
    } 
    .ecn-logo{ 
    width: 350px; 
    } 
} 
@media all and (max-width: 480px) { 
    .ecn-logo{ 
    width: 300px; 
    } 
} 

</style> 

而这里main.js还有:

// The Vue build version to load with the `import` command 
// (runtime-only or standalone) has been set in webpack.base.conf with an alias. 
import Vue from 'vue' 
import Vuetify from 'vuetify' 
import './stylus/main.styl' 
import App from './App' 
import router from './router' 
import VeeValidate from 'vee-validate' 

Vue.use(Vuetify) 
Vue.use(VeeValidate) 
Vue.config.productionTip = false 

/* eslint-disable no-new */ 
new Vue({ 
    el: '#app', 
    router, 
    template: '<App/>', 
    components: { App } 
}) 

我目前使用与vee-的Vuetify形式验证,因为你可以看到这里: https://vuetifyjs.com/components/forms,我不想与Vue使用JQuery。

现在,验证工作,但点击“提交”按钮后没有任何变化。

谢谢!表单验证后

+0

你是什么意思' “没有任何变化”'? Afaics您没有任何ajax电话。 如果您的'submit'函数被触发,并且您想在验证后调用ajax,则可以使用'this。$ validator.validateAll()。then((isValid)=> {isValid} {/如果有效*/ } });' – Traxo

+0

谢谢@Traxo。我以前没有意识到。现在工作正常。 –

回答

1

使得Ajax调用:

this.$validator.validateAll().then(isValid => { 
    if (isValid) { 
     /* ajax call if valid */ 
    } 
    else{ 
     /* something else if not valid */ 
    } 
});