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

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con

Khi nào nên dùng main, section, article, header, footer, và aside trong HTML5

HTML5 đã giới thiệu các thẻ ngữ nghĩa giúp cấu trúc nội dung web một cách có

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th