Vue Vuelidate sample
by kabanoki
HTML
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vuelidate.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/validators.min.js"></script>
<div id="app">
<form>
<div>
<p>ID*:</p>
<input type="text" v-model="$v.text.$model" :class="status($v.text)">
<p class="note">{{ $v.text.$params.minLength.min }}文字以上</p>
<div v-if="$v.text.$dirty">
<div class="error" v-if="!$v.text.required">IDは必須入力です。</div>
<div class="error" v-if="!$v.text.minLength">IDは{{ $v.text.$params.minLength.min }}文字以上で入力してください。</div>
</div>
</div>
<div>
<p>パスワード*:</p>
<input type="password" v-model="$v.password.$model" :class="status($v.password)">
<p class="note">{{ $v.password.$params.minLength.min }}文字以上{{ $v.password.$params.maxLength.max }}文字以内で入力</p>
<div v-if="$v.password.$dirty">
<div class="error" v-if="!$v.password.required">パスワードは必須入力です。</div>
<div class="error" v-if="!$v.password.minLength">パスワードは{{ $v.password.$params.minLength.min }}文字以上で入力してください。</div>
<div class="error" v-if="!$v.password.maxLength">パスワードは{{ $v.password.$params.maxLength.max }}文字以内で入力してください。</div>
</div>
</div>
</form>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
p {
margin: 0px;
}
p.note {
color: #cdcdcd;
font-size: 85%;
}
input {
border: 1px solid silver;
border-radius: 4px;
background: white;
padding: 5px 10px;
}
.dirty {
border-color: #5A5;
background: #EFE;
}
.dirty:focus {
outline-color: #8E8;
}
.error {
border-color: red;
background: #FDD;
}
.error:focus {
outline-color: #F99;
}
Vue
Vue.use(window.vuelidate.default);
const { required, minLength, maxLength } = window.validators
new Vue({
el: '#app',
data: {
text: '',
password: ''
},
validations: {
text: {
required,
minLength: minLength(5)
},
password: {
required,
minLength: minLength(4),
maxLength: maxLength(8),
}
},
methods: {
status(validation) {
return {
error: validation.$error,
dirty: validation.$dirty
}
}
}
})