如何將 VeeValidate 整合進大型專案架構 ?

栏目: JavaScript · 发布时间: 6年前

内容简介:VeeValidate 除了內建很多 Validation Rule,還可以自訂Vue 2.5.17VeeValidate 2.1.2

VeeValidate 除了內建很多 Validation Rule,還可以自訂 語系 ,自訂 訊息 ,自訂 驗證規則 ,但要如何這些整合進大型專案架構呢 ?

Version

Vue 2.5.17

VeeValidate 2.1.2

Directory

如何將 VeeValidate 整合進大型專案架構 ?

  • src 下建立 validators 目錄,專門存放 VeeValidate 所使用的自訂 validator
  • validators 目錄下建立 dictionaries 目錄,專門放置各種 自訂訊息檔
  • validators 目錄下建立 rules 目錄,專門放置各種 自訂驗證規則檔

Component

demo.vue

<template>
  <div>
    <div>
      <input v-validate="'required|email'" name="email" type="text">
    </div>
    <div>
      <span>{{ errors.first('email') }}</span>
    </div>
    <div>
      <input v-validate="'required|custom-email'" name="custom-email" type="text">
    </div>
    <div>
      <span>{{ errors.first('custom-email') }}</span>
    </div>
  </div>
</template>

<script>
import demoValidator from '../validators/demo.validator';

demoValidator();

export default {
  name: 'demo',
};
</script>

19 行

import demoValidator from '../validators/demo.validator';

demoValidator();

原本要在 demo component 所跑的 VeeValidate,完全整合到 demoValidator()

demo.validator.js

import Vue from 'vue';
import VeeValidate, { Validator } from 'vee-validate';
import zh_TW from 'vee-validate/dist/locale/zh_TW';
import { requiredDictionary } from './dictionaries/required.dictionary';
import { emailDictionary } from './dictionaries/email.dictionary';
import { customEmailRule } from './rules/custom-email.rule';

export default () => {
  Vue.use(VeeValidate);
  Validator.localize('zh_TW', zh_TW);

  /** Dictionary */
  const dictionary = {
    zh_TW: {
      requiredDictionary,
      emailDictionary,
    },
  };

  Validator.localize(dictionary);

  /** Custom Rule */
  Validator.extend('custom-email', customEmailRule);
};

第 4 行

import { requiredDictionary } from './dictionaries/required.dictionary';
import { emailDictionary } from './dictionaries/email.dictionary';

dictionaries 目錄下所需要的 自訂訊息檔 import 進來。

第 6 行

import { customEmailRule } from './rules/custom-email.rule';

rules 目錄下所需要的 自訂驗證規則檔 import 進來。

第 9 行

Vue.use(VeeValidate);
Validator.localize('zh_TW', zh_TW);

使用 VeeValidate,並且設定 語系

12 行

/** Dictionary */
const dictionary = {
  zh_TW: {
    requiredDictionary,
    emailDictionary,
  },
};

Validator.localize(dictionary);

架構出 component 所需要的 自訂訊息檔

22 行

/** Custom Rule */
Validator.extend('custom-email', customEmailRule);

架構出 component 所需要的 自訂驗證規則檔

Dictionary

email.dictionary.js

export const emailDictionary = 'Email 格式錯誤';

定義 email rule 的自訂訊息。

Rule

required.dictionary.js

export const requiredDictionary = field => `請輸入 ${field}`;

定義 required rule 的自訂訊息。

custom-email.rule.js

const getMessage = field => `${field} 格式不正確`;

const validate = value => {
  const regex = /^\w+\.*\w+@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]+$/;
  return regex.test(value);
};

export const customEmailRule = {
  getMessage,
  validate,
};

設定 customEmail 的自訂驗證規則。

Conclusion

  • 由於將 dictionaryrule 獨立出來,component 的 validator 可以自由組合所需要的 dictionaryrule ,非常靈活
  • 當然可以將 VeeValidate 所有的 自訂訊息檔自訂驗證規則檔 統一寫在一起,但這樣子Webpack 的 Tree Shaking 無法發揮,比較好的方式是每個 component 有自己的 validator,再由 validator 架構出所需要的 自訂訊息檔自訂驗證規則檔

Sample Code

完整的範例可以在我的 GitHub 上找到


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数学之美

数学之美

吴军 / 人民邮电出版社 / 2012-5-1 / 45.00元

几年前,“数学之美”系列文章原刊载于谷歌黑板报,获得上百万次点击,得到读者高度评价。读者说,读了“数学之美”,才发现大学时学的数学知识,比如马尔可夫链、矩阵计算,甚至余弦函数原来都如此亲切,并且栩栩如生,才发现自然语言和信息处理这么有趣。 今年,作者吴军博士几乎把所有文章都重写了一遍,为的是把高深的数学原理讲得更加通俗易懂,让非专业读者也能领略数学的魅力。读者通过具体的例子学到的是思考问题的......一起来看看 《数学之美》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具