中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Vue中實現表單驗證

發布時間:2021-05-07 15:49:23 來源:億速云 閱讀:361 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關怎么在Vue中實現表單驗證,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

為什么要使用Vue

Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網頁中相應的地方,所以越來越多的前端開發者使用vue。

<div>
 <h3>你好,請登錄</h3>
 <div>
  <form id="loginFrom">
   <div>
    <label>郵箱</label>
    <input type="text" class="form-control" id="inputEmail3" placeholder="Email" v-model="email">
    </div>
   </div>
   <div>
    <label>密碼</label>
    <input type="password" class="form-control" id="inputPassword3" placeholder="Password" v-model="password">
   </div>
   <div>
    <button type="button" class="btn btn-default login" v-on:click="login()">登錄</button>
   </div>
   <div v-if="errorList.length > 0">
    <div class="alert alert-danger" role="alert">{{errorList.join(';')}}</div>
   </div>
  </form>
 </div>
</div>
<script>
var vm = new Vue({
 el: '#loginFrom',
 data: {
  email: "",
  password: "",
  errorList: []
 },
 methods: {
  validate: function () {
   this.errorList = []
   if (this.email == '') {
    this.errorList.push('請輸入郵箱');
   } else {
    var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
    if (!reg.test(this.email)) {
     this.errorList.push('請輸入有效的郵箱');
    }
   }
   if (this.password == '') {
    this.errorList.push('請輸入密碼');
   } else {
    if (this.password.length < 6) {
     this.errorList.push('密碼長度不得少于6位');
    }
   }

   return this.errorList.length <= 0;
  },
  login: function () {
   if (this.validate()) {
    alert('登錄成功');
   }
  }
 }
});
</script>

為了排除無關內容對大家的影響,寫這個例子的時候,博主排除了一切復雜的HTML結構和CSS樣式,經過簡單潤色以后,這個例子的效果展示如下,果然GUI滿足了人們顏控的一面,可讓這個世界高速運行的是CLI,Bootstrap是博主這種“全棧工程師”的最愛之一。這種驗證方式簡直是人類本能的反應,可這恰好是最糟糕的一個例子,因為這個代碼完全沒法復用,可以想象得到,如果再繼續增加針對密碼強度,譬如大小寫、數字等等的驗證,這個代碼會混亂成什么樣子,所以,這是最簡單的表單驗證,同樣是最糟糕的表單驗證。

怎么在Vue中實現表單驗證

基于jQuery的表單驗證

其實,如果不是因為老項目依賴jQuery,而新項目在某些地方又需要和老項目保持一致,有誰會喜歡在Vue的世界里使用jQuery呢?因為數據驅動和事件驅動,真的是兩種不同的思想,我就見過因為監聽不到某個事件而花費一整天時間的人……所以,這里使用jQuery的表單驗證插件jQuery Validation,目的只有一個,即實現博主對自己的承諾,做一個和老項目一模一樣的表單驗證。官方這個示例最大的問題是,它的檢驗邏輯擴展性比較差,后端同學對這個應該有所體會啦,譬如實際業務中常常有郵箱、手機號、非空、數字、正則等等的驗證規則,而后端常常采用基于Attribute的驗證或者是FluentValidation這樣的庫,所以,核心問題是,能不能定義相應的驗證規則。接下來,我們通過jQuery的表單驗證插件來實現驗證。

通常情況下,jQuery Validation支持面向控件和面向代碼兩種驗證方式。所謂面向控件,就是指在控件里添加類似requiredemailrange等等的擴展屬性,jQuery Validation內置了十余種標準的驗證規則,基本可以滿足我們的日常使用。而面向代碼,就是通過JavaScript來定義驗證規則,這就非常符合Vue數據驅動的風格了,因為在JavaScript里一切皆是對象,而這些對象可以作為Vue中的數據來使用。自然而然地,在第一個示例的基礎上,我們可以非常容易地擴展出基于jQuery的表單驗證:

var vm = new Vue({
 el:'#loginFrom',
 data:{
  email:"",
  password:"",
  validators:{
   rules: {
    email: {
     required: true,
     email: true
    },
    password: {
     required: true,
     minlength: 6,
    }
   },
   messages:{
    email:{
     required:"請輸入郵箱",
     email:"請輸入有效的郵箱"
    },
    password:{
     required:"請輸入密碼",
     minlength:"密碼長度不得少于6位"
    }
   }
  }
 },
 mounted:function(){
  $('#loginFrom').validate(this.validators);
 }
});

對于當前表單loginFrom,其驗證規則為validators,它完全參照jQuery Validation的API文檔而來,具體大家可以從jQuery Validation的文檔來做進一步了解。這里唯一看起來不爽的就是#loginFrom,因為它和整個Vue看起來格格不入。不過,像博主目前項目的處境,如果老項目里使用jQuery來對表單進行驗證,而使用Vue開發的新項目要兼容老項目的設計風格,使用jQuery有什么不可以呢?不得不說,Vue作為一個漸進式的開發框架,真正照顧了各個"年齡"段的前端工程師。使用jQuery Validation以后的表單驗證效果如下:

怎么在Vue中實現表單驗證

通過jQuery Validation,我們或許能感覺到一點不一樣的地方,那就是表單驗證其實還是蠻有意思的哈。也許是因為我原本是一個無聊的人,所以看到一點新的東西就覺得有趣。就像我雖然在提交數據時在后端做了校驗,可犧牲的其實是整個前端的使用體驗。而如果在前端對數據進行校驗,是在輸入過程中校驗還是在輸入完成校驗,是通過表單自帶的提交功能還是自己發起一個AJAX請求,這里面的確是有非常多的細節支撐的。第一種方案不支持遠程校驗,這更加能說明校驗本身要考慮的不單單只有前端了,同理,有了前端的校驗,不代表后端可以不做校驗。前端時間有人在知乎上提問,大意是說前端該不該完全信任后端返回的數據,嚴格來說,我們不應該信任任何人提供的數據,而這就是校驗這件事情本身的意義。

基于Vue的表單驗證

OK,如果說前面的兩種校驗是因為我們有一點歷史包袱,那么,接下來,我們將嘗試采用更“現代化”的表單驗證方式。通過Vue文檔中關于數據校驗這一節的內容,我們了解到官方推薦的兩個表單驗證插件是vuelidate和VeeValidate,而實際上這篇博客中的第一個例子,就是由文檔中的例子演化而來。我個人比較喜歡后者,所以,下面我們將使用這個插件來完成第三個例子。首先 ,我們通過Vue-Cli創建一個Vue項目,然后安裝下面vee-validatevue-i18n兩個插件:

npm install vee-validate@2.0.0 --save
npm install vue-i18n

注意到這里指定了版本號,這是因為最新的3.x超出了我這個新人的接受范圍,一句話,太難了!接下來,我們在入口文件main.js中添加下面的代碼,目的是啟用這兩個插件:

import VueI18n from 'vue-i18n';
import VeeValidate from 'vee-validate';
import zh_CN from 'vee-validate/dist/locale/zh_CN'

//啟用Vue國際化插件
Vue.use(VueI18n)

//配置VeeValidate
const i18n = new VueI18n({
 locale: 'zh_CN',
})

Vue.use(VeeValidate, {
 i18n,
 i18nRootKey: 'validation',
 dictionary: {
  zh_CN
 }
});

接下來,編寫一個單文件組件LoginForm.vue:

<!-- template of LoginForm -->
<template>
 <div class="container">
 <h3 class="text-center">你好,請登錄</h3>
 <div class="row">
  <form class="form-horizontal col-md-offset-4 col-md-4" id="loginFrom">
  <div class="form-group">
   <label for="inputEmail3" class="col-sm-2 control-label">郵箱</label>
   <div class="col-sm-10">
   <input type="text" class="form-control" id="email" name="email" placeholder="Email" v-model="email" v-validate="'required|email'" data-vv-as="郵箱"/>
   <p class="alert alert-danger" role="alert" v-show="errors.has('email')">{{ errors.first('email') }}</p>
   </div>
  </div>
  <div class="form-group" name="password" rules="required">
   <label for="inputPassword3" class="col-sm-2 control-label">密碼</label>
   <div class="col-sm-10">
   <input type="password" class="form-control" id="password" name="password" placeholder="Password" v-model="password" v-validate="'required|min:6'" data-vv-as="密碼"/>
   <p class="alert alert-danger" role="alert" v-show="errors.has('password')">{{ errors.first('password') }}</p>
   </div>
  </div>
  <div class="form-group">
   <div class="col-sm-offset-2 col-sm-10">
   <div class="checkbox">
    <label>
    <input type="checkbox" />記住密碼
    </label>
   </div>
   </div>
  </div>
  <div class="form-group">
   <div class="col-sm-offset-2 col-sm-10">
   <button type="button" class="btn btn-default login" v-on:click="login()">登錄</button>
   </div>
  </div>
  </form>
 </div>
 </div>
</template>
<!-- script of LoginForm -->
<script>
export default {
 name: "LoginForm",
 components: {},
 data: () => ({
 email: "",
 password: ""
 }),
 methods: {
 login: function() {

 }
 }
};
</script>
<!-- style of LoginForm -->
<style scoped>
.login {
 color: white;
 height: 38px;
 width: 300px;
 background-color: #2b669a;
}
</style>

可以看到,我們在關鍵的兩個input控件上添加了v-validatedata-vv-as這兩個屬性。比如我們這里需要驗證用戶輸入的郵箱是否合法、郵箱是否為空,那么我們就可以使用下面的語法:

<input type="text" class="form-control" id="email" name="email" placeholder="Email" v-model="email" v-validate="'required|email'" data-vv-as="郵箱"/>
<p class="alert alert-danger" role="alert" v-show="errors.has('email')">{{ errors.first('email') }}</p>

這些語法在Vue中被稱為指令,而data-vv-as則是HTML5中的一個特性,用來給提示信息中的字段起一個別名。實際上,這個插件里同樣內置了一批常見的校驗規則。當控件中的值不滿足校驗條件時,就會在errors中產生錯誤信息,所以,我們根據錯誤信息中是否包含指定字段來決定要不要展示錯誤信息,這就是這個插件的作用。運行這個例子,我們會得到下面的結果。

怎么在Vue中實現表單驗證

既然提到這類表單驗證最難的地方在于擴展性,那么下面我們再來看看如何擴展一個新的校驗規則,這里以最常見的手機號校驗為例, 個人以為這是這個插件最為強大的地方:

Validator.extend('isMobile', {
 messages: {
 zh_CN: field => field + '必須是11位手機號碼'
 },
 validate: value => {
 return value.length === 11 && /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value)
 }
})

以上就是怎么在Vue中實現表單驗證,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

彭山县| 天镇县| 邛崃市| 中江县| 莱芜市| 盘锦市| 南郑县| 融水| 莒南县| 贵南县| 方城县| 杭州市| 洛隆县| 治多县| 新乡县| 阿图什市| 广东省| 炉霍县| 景宁| 恭城| 洮南市| 凤庆县| 横山县| 云安县| 内江市| 临朐县| 平江县| 辽宁省| 娄烦县| 凭祥市| 万全县| 泽库县| 南通市| 务川| 大安市| 赤水市| 永安市| 霸州市| 佛山市| 宁陕县| 融水|