前情提要
Vue.js
專案開發,一般應用程式都會遇到表單送出功能,然而前後端分離架構下,前後端必須採用不同階段的驗證,筆者認為基本的資料驗證必須得在前端完成,後端API接收到的資料,應該只剩資料重複性檢查等複雜驗證,這才是筆者認為的健康的資料流。Vue.js
驗證相關套件中,筆者選擇vee-validate,此篇就以該套件說明使用方式。
使用工具及環境參考[Vue]Vue基本語法
內容
安裝
1 2 3
| npm install vee-validate --save yarn add vee-validate
|
載入使用
1 2 3 4 5
|
import VeeValidate from 'vee-validate';
Vue.use(VeeValidate);
|
基本用法
1 2 3 4
| <input v-validate="'required'" name="myinput" type="text">
<span>{{ errors.first('myinput') }}</span>
|
表單送出事件中驗證
1 2 3 4 5 6 7 8 9 10
| submitProcess: function() { this.$validator.validateAll().then(result => { if (result) { return; } }); }
|
登入頁面實作
以上基本用法的實際應用,跟著筆者做一個登入頁面感受一下吧。筆者會持續更新之前使用的VueDemo專案,連結於此
https://github.com/EugeneSu0515/VueDemoApp.git
安裝步驟就省略掉了,參考上方安裝方法,接下來實作其他步驟:
Template區塊宣告
加一個Validation Component,template區塊中宣告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
<form> <div class="form-group"> <label for="userId">UserId</label> <input type="text" class="form-control" id="userId" name="userId" v-validate="'required'"> <div class="invalid-feedback" style="display:block;">{{ errors.first('userId') }}</div> </div> <div class="form-group"> <label for="password">Password</label> <input type="text" class="form-control" id="password" name="password" v-validate="'required'"> <div class="invalid-feedback" style="display:block;">{{ errors.first('password') }}</div> </div> <button class="btn btn-primary" @click.prevent="submitProcess()">登入</button> </form>
|
Script區塊宣告
同樣是Validation Component的script區塊中宣告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| export default { name: "Validation", data() { return {}; }, methods: { submitProcess: function() { this.$validator.validateAll().then(result => { if (result) { alert("Form Submitted!"); return; } alert("Correct them errors!"); }); } } };
|
美化版面
為了美化版面,適當的加入其他版面配置語法,Validation Component完整語法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| <template> <div id="validation"> <div class="row justify-content-center"> <div class="col-4"> <div class="card"> <div class="card-header"> <h3 class="card-title">登入</h3> </div> <div class="card-body"> <form> <div class="form-group"> <label for="userId">UserId</label> <input type="text" class="form-control" id="userId" name="userId" v-validate="'required'"> <div class="invalid-feedback" style="display:block;"> {{ errors.first('userId') }} </div> </div> <div class="form-group"> <label for="password">Password</label> <input type="text" class="form-control" id="password" name="password" v-validate="'required'"> <div class="invalid-feedback" style="display:block;"> {{ errors.first('password') }} </div> </div> <button class="btn btn-primary" @click.prevent="submitProcess()">登入</button> </form> </div> </div> </div> </div> </div> </template> <script> export default { name: "Validation", data() { return {}; }, methods: { submitProcess: function() { this.$validator.validateAll().then(result => { if (result) { alert("Form Submitted!"); return; } alert("Correct them errors!"); }); } } }; </script>
|
設置Router
擴充router
,router/index.js
增加連到Validation
Component的連結
1 2 3 4 5 6 7
| import Validation from '@/components/Validation'
{ path: 'validation', name: 'ValidationDemo', component: Validation }
|
改造navbar
裡的Menu
1 2
| <router-link :to="{ path: '/validation' }" class="dropdown-item">vee-validate</router-link>
|
實際效果
結論
以上,簡單的套用validation
效果,我覺得vee-validate
已經算很容易套用,下一篇介紹其屬性使用及進階應用,這篇就到這邊。
詳細code請參考 https://github.com/EugeneSu0515/VueDemoApp.git。