Vuelidate example

by Cheslav Anoshko

HTML

<script src="https://unpkg.com/vuelidate/dist/vuelidate.min.js"></script>
<script src="https://unpkg.com/vuelidate/dist/validators.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>
<div id="app">
  <input type="text" v-model="text"
    v-on:input="$v.text.$touch"
    v-bind:class="{error: $v.text.$error, valid: $v.text.$dirty && !$v.text.$invalid}"
  >
  <pre>{{ $v }}</pre>
  Text: {{ text }}
</div>

CSS

input {
  border: 1px solid silver;
  border-radius: 4px;
  background: white;
  padding: 5px 10px;
}

.error {
  border-color: red;
  background: #FDD;
}

.error:focus {
  outline-color: #F99;
}

.valid {
  border-color: #5A5;
  background: #EFE;
}

.valid:focus {
  outline-color: #8E8;
}

Babel + JSX

Vue.use(window.vuelidate.default)
const { required, minValue } = window.validators

new Vue({
	el: "#app",
  data: {
  	text: ''
  },
  validations: {
  	text: {
			minValue: minValue(moment(new Date(), 'DD.MM.YYYY').format('DD.MM.YYYY')),
    }
  }
})