Vue.config.productionTip = false;
Vue.config.devtools = false;
new Vue({
el: '#app',
data: () => ({
valid: false,
name: '',
nameRules: [
(v) => !!v || 'Name is required',
(v) => v.length <= 10 || 'Name must be less than 10 characters'
],
}),
computed: {
formState() {
let nameValid = false;
let errorBucket = []
let nameInput = this.$refs.nameInput;
if (nameInput) {
nameValid = nameInput.valid
errorBucket = nameInput.errorBucket
}
return JSON.stringify({
valid: this.valid,
nameValid,
errorBucket,
name: this.name
});
}
},
methods: {
submit() {
console.log(this.valid, this.name)
}
},
vuetify: new Vuetify(),
})
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
<div id="app">
<v-app>
<v-content>
<v-form v-model="valid">
<v-container>
<v-text-field ref="nameInput" v-model="name" :rules="nameRules" label="Name"></v-text-field>
<v-btn :disabled="!valid" class="mr-4" @click="submit">submit</v-btn>
<div>{{formState}}</div>
</v-container>
</v-form>
</v-content>
</v-app>
</div>