Vuejs validate form with VeeValidate

Lời mở đầu Trong bài viết này, mình sẽ hướng dẫn mọi người validate form với VeeValidate. Install VeeValidate Để cài đặt, các bạn chạy câu lệnh phía dưới # NPM npm install vee-validate --save # Yarn yarn add vee-validate Sau khi cài đặt xong, các bạn mở file main.js lên và thêm code phía

Lời mở đầu

Trong bài viết này, mình sẽ hướng dẫn mọi người validate form với VeeValidate.

Install VeeValidate

Để cài đặt, các bạn chạy câu lệnh phía dưới

# NPM
npm install vee-validate --save


# Yarn
yarn add vee-validate


Sau khi cài đặt xong, các bạn mở file main.js lên và thêm code phía dưới vào

import{ ValidationObserver, ValidationProvider, extend }from'vee-validate';import*as rules from'vee-validate/dist/rules';// install rules
Object.keys(rules).forEach(rule=>{extend(rule, rules[rule]);});

Vue.component('ValidationObserver', ValidationObserver);
Vue.component('ValidationProvider', ValidationProvider);

các bạn chạy thêm lệnh dưới để cài thêm boostrap vào dùng cho nhanh

npm i bootstrap-vue

sau khi cài xong các bạn thêm boostrap vào như file bên dưới

import Vue from"vue";import{ ValidationObserver, ValidationProvider, extend }from'vee-validate';import*as rules from'vee-validate/dist/rules';import App from"./App.vue";import BootstrapVue from'bootstrap-vue';import'bootstrap/dist/css/bootstrap.css';import'bootstrap-vue/dist/bootstrap-vue.css';// install rules
Object.keys(rules).forEach(rule=>{extend(rule, rules[rule]);});// Install components globally
Vue.use(BootstrapVue);
Vue.component('ValidationObserver', ValidationObserver);
Vue.component('ValidationProvider', ValidationProvider);

Vue.config.productionTip =false;newVue({render:h=>h(App)}).$mount("#app");

Create Form with Bootstrap in Vue

Bây giờ chúng ta tạo một form dùng boostrap

<template><b-form @submit.prevent="handleSubmit"><b-form-group label="Name"><b-form-input
              type="text"
              v-model="user.name"
              placeholder="Enter name"></b-form-input></b-form-group><b-form-group label="Email"><b-form-input
              type="email"
              v-model="user.email"
              placeholder="Enter email"></b-form-input></b-form-group><b-form-group label="Mobile"><b-form-input
              type="text"
              v-model="user.mobile"
              placeholder="Enter mobile no"></b-form-input></b-form-group><b-form-group label="City"><b-form-select v-model="user.city"><option value="">Choose</option><option value="CA">Los Angeles</option><option value="IL">Chicago</option><option value="LA">New Orleans</option><option value="NM">Santa Fe</option></b-form-select></b-form-group><b-form-group label="Password"><b-form-input v-model="user.password" type="password" placeholder="Enter password"></b-form-input></b-form-group><b-form-group label="Confirm Password"><b-form-input v-model="user.confirmation" type="password"></b-form-input></b-form-group><b-form-group><b-form-checkbox-group v-model="user.hobbies"><b-form-checkbox value="Reading">Reading</b-form-checkbox><b-form-checkbox value="Gyming">Gyming</b-form-checkbox><b-form-checkbox value="Movies">Movies</b-form-checkbox></b-form-checkbox-group></b-form-group><b-button block type="submit" variant="primary">Submit</b-button></b-form></template><script>exportdefault{data:()=>({
    user:{
        name:'',
        email:'',
        mobile:'',
        city:'',
        password:'',
        confirmation:'',
        hobbies:[]}}),
  methods:{handleSubmit(){
      console.log(this.user);}}};</script><style lang="scss">
form {
   max-width:500px;
   margin:0 auto; 
   text-align: left;}.col-form-label {
    font-weight:600;}</style>

Vue Form Validation with VeeValidate

Chúng ta đã đăng ký ValidationProvider trong file main.js. VeeValidate hỗ trợ rất nhiều rules để chúng ta sử dụng để validate, các bạn vào link tại đây để xem thêm.

Bây giờ file sẽ như thế này

<template><ValidationObserver ref="observer"><b-form slot-scope="{ validate }" @submit.prevent="validate().then(handleSubmit)"><ValidationProvider rules="required" name="Name"><b-form-group slot-scope="{ valid, errors }" label="Name"><b-form-input
              type="text"
              v-model="user.name":state="errors[0] ? false : (valid ? true : null)"
              placeholder="Enter name"></b-form-input><b-form-invalid-feedback>{{ errors[0]}}</b-form-invalid-feedback></b-form-group></ValidationProvider><ValidationProvider rules="required|email" name="Email"><b-form-group 
          slot-scope="{ valid, errors }"
          label="Email"><b-form-input
              type="email"
              v-model="user.email":state="errors[0] ? false : (valid ? true : null)"
              placeholder="Enter email"></b-form-input><b-form-invalid-feedback>{{ errors[0]}}</b-form-invalid-feedback></b-form-group></ValidationProvider><ValidationProvider rules="required" name="Mobile"><b-form-group 
          slot-scope="{ valid, errors }"
          label="Mobile"><b-form-input
              type="text"
              v-model="user.mobile":state="errors[0] ? false : (valid ? true : null)"
              placeholder="Enter mobile no"></b-form-input><b-form-invalid-feedback>{{ errors[0]}}</b-form-invalid-feedback></b-form-group></ValidationProvider><ValidationProvider name="City" rules="required"><b-form-group slot-scope="{ valid, errors }" label="City:"><b-form-select 
            :state="errors[0] ? false : (valid ? true : null)" 
            v-model="user.city"><option value="">Choose</option><option value="CA">Los Angeles</option><option value="IL">Chicago</option><option value="LA">New Orleans</option><option value="NM">Santa Fe</option></b-form-select><b-form-invalid-feedback>{{ errors[0]}}</b-form-invalid-feedback></b-form-group></ValidationProvider><ValidationProvider rules="required" name="Password" vid="password"><b-form-group 
          slot-scope="{ valid, errors }"
          label="Password"><b-form-input
              type="password"
              v-model="user.password":state="errors[0] ? false : (valid ? true : null)"
              placeholder="Enter password"></b-form-input><b-form-invalid-feedback>{{ errors[0]}}</b-form-invalid-feedback></b-form-group></ValidationProvider><ValidationProvider rules="required|confirmed:password" name="Confirm Password"><b-form-group 
          slot-scope="{ valid, errors }"
          label="Confirm Password"><b-form-input
              type="password"
              v-model="user.confirmation":state="errors[0] ? false : (valid ? true : null)"></b-form-input><b-form-invalid-feedback>{{ errors[0]}}</b-form-invalid-feedback></b-form-group></ValidationProvider><ValidationProvider name="Hobbies" rules="required|length:1"><b-form-group slot-scope="{ valid, errors }"><b-form-checkbox-group 
            :state="errors[0] ? false : (valid ? true : null)" 
            v-model="user.hobbies"><b-form-checkbox value="Reading">Reading</b-form-checkbox><b-form-checkbox value="Gyming">Gyming</b-form-checkbox><b-form-checkbox value="Movies">Movies</b-form-checkbox></b-form-checkbox-group><b-form-invalid-feedback>{{ errors[0]}}</b-form-invalid-feedback></b-form-group></ValidationProvider><b-button block type="submit" variant="primary">Submit</b-button></b-form></ValidationObserver></template><script>import{ ValidationObserver, ValidationProvider }from'vee-validate';exportdefault{
  components:{
    ValidationObserver,
    ValidationProvider
  },data:()=>({
    user:{
        name:'',
        email:'',
        mobile:'',
        city:'',
        password:'',
        confirmation:'',
        hobbies:[]}}),
  methods:{handleSubmit(){// pass validate  
      console.log(this.user);}}};</script><style lang="scss">
form {
   max-width:500px;
   margin:0 auto; 
   text-align: left;}.form-group > label {
    font-weight:600;}</style>

Bây giờ các bạn mở trình duyệt lên và xem nhé.

Bạn nào muốn custom message thì làm như dưới đây

import{ extend }from'vee-validate';import{ required }from'vee-validate/dist/rules';// Bạn xem link trên để xem tất cả rulesextend('required',{...required,
    message:'Message custom',});

Khi này tất cả những thằng nào mà required thì sẽ đk đổi thành message mà mình vừa custom.

Tổng kết

Ok! Vậy là mình vừa giới thiệu xong cho các bạn một package validate form. Nó làm cho việc validate trở nên siêu dễ dàng.

Nếu có chỗ nào sai xót mong các bạn comment để cho mình biết mình sửa và hẹn các bạn ở các bài viết tiếp theo 😍😍

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ