Vue數(shù)據(jù)增刪改查與表單驗(yàn)證的實(shí)現(xiàn)流程介紹
1. 準(zhǔn)備工作
后臺服務(wù)接口,對書本的增刪改查操作
2. 彈出窗口
進(jìn)入ElementUi官網(wǎng), 找到Dialog對話框,可以參考“嵌套表單的dialog”實(shí)現(xiàn)。
該步驟先實(shí)現(xiàn)彈出窗口的前端邏輯,并不會調(diào)用后臺接口服務(wù)進(jìn)行實(shí)際的業(yè)務(wù)操作。
BookList.vue
<!-- 彈出窗口:增加和修改書本信息共用一個彈出窗口,需要根據(jù)用戶的選擇動態(tài)的設(shè)置彈出窗口的標(biāo)題 :tile 通過綁定值的方式設(shè)置dialog的標(biāo)題 :visible.sync 控制彈出窗口的顯示或隱藏,.sync同步修飾符 @close="closeBookForm",設(shè)置窗口關(guān)閉時調(diào)用的處理函數(shù),可用于清空表單 :model="bookForm":用于定義表單對應(yīng)的model,具體model的定義可見data部分。 v-show="optiontype == 'update'" 通過操作類型控制是否顯示書本編號字段,如果當(dāng)前操作類型為 新增,則不用顯示,書本編號在數(shù)據(jù)表中是自增的。 :label-width="formLabelWidth" 統(tǒng)一定義標(biāo)簽的寬度。 :style="{width: formEleWidth}" 統(tǒng)一定義form元素的寬度。 --> <el-dialog :title="dialogName" :visible.sync="dialogFormVisible" @close="closeBookForm" width="500px"> <el-form :model="bookForm"> <el-form-item v-show="optiontype == 'update'" label="編號" :label-width="formLabelWidth"> <el-input v-model="bookForm.id" autocomplete="off" :style="{width: formEleWidth}"></el-input> </el-form-item> <el-form-item label="書名" :label-width="formLabelWidth"> <el-input v-model="bookForm.bookname" autocomplete="off" :style="{width: formEleWidth}"></el-input> </el-form-item> <el-form-item label="價格" :label-width="formLabelWidth"> <el-input v-model="bookForm.price" autocomplete="off" :style="{width: formEleWidth}"></el-input> </el-form-item> <el-form-item label="類型" :label-width="formLabelWidth"> <el-select v-model="bookForm.booktype" placeholder="選擇類型" :style="{width:formEleWidth}"> <el-option label="名著" value="mz"></el-option> <el-option label="小說" value="xs"></el-option> </el-select> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="dialogFormVisible = false">取 消</el-button> <el-button type="primary" @click="dialogFormVisible = false">確 定</el-button> </div> </el-dialog>
在數(shù)據(jù)表格中添加“編輯”“刪除”功能連接。(在element-ui官方demo -> table組件中,有如何加入刪除,編輯等按鈕的示例)
<!--表格--> <el-table :data="books" style="width: 100%;" :border="true" max-height="530"> <el-table-column prop="id" label="編號" min-width="40" align="center"></el-table-column> <el-table-column prop="bookname" label="名稱" min-width="100" align="center"></el-table-column> <el-table-column prop="price" label="價格" min-width="70" align="center"></el-table-column> <el-table-column prop="booktype" label="類型" min-width="70" align="center"></el-table-column> <!-- “編輯”“刪除”功能連接 --> <el-table-column label="操作"> <!-- 在<template>上使用特殊的slot-scope 特性,可以接收傳遞給插槽的prop slot-scope:類似將每一行的row對象封裝到槽中,之后直接從scope中獲取 row對象信息和行索引index信息即可 --> <template slot-scope="scope"> <el-button size="mini" @click="handleEdit(scope.row)">編輯</el-button> <el-button size="mini" type="danger" @click="handleDelete(scope.row)">刪除</el-button> </template> </el-table-column> </el-table>
script部分:
export default { name: 'BookList', data: function() { return { bookname: '', books: [], total: 0, rows: 10, page: 1, //控制對話框是否顯示,默認(rèn)是隱藏狀態(tài) dialogFormVisible: false, //統(tǒng)一控制標(biāo)簽的寬度 formLabelWidth: '40px', //統(tǒng)一控制表單元素的寬度 formEleWidth: '400px', //對話框標(biāo)題,默認(rèn)為新增,如果是點(diǎn)擊修改按鈕打開對話框,則標(biāo)題應(yīng)為修改。 dialogName:'新增書本', //操作類型,默認(rèn)為添加,如果是點(diǎn)擊修改打開對話框,則操作類類型應(yīng)變?yōu)樾薷? //該變量用于控制是否顯示書本編號字段,當(dāng)操作類型為新增時不需顯示(書本編號數(shù)據(jù)表字段為自增) //當(dāng)操作類型為修改時,需要顯示。 optiontype: 'add', //定義表單對應(yīng)的model bookForm: { id: '', bookname: '', price:null, booktype: '' } } }, methods: { qry: function() { let url = this.axios.urls.BOOKMSG_BOOKINFO_REQ; this.axios.post(url, { bookname: this.bookname, page: this.page, rows: this.rows }).then(resp => { console.log(resp); this.books = resp.data.data; this.total = resp.data.total; }).catch(error => { console.log(error); }); }, //當(dāng)每頁顯示的記錄數(shù)發(fā)生變化時,設(shè)置當(dāng)前頁碼為1,執(zhí)行查詢。 handleSizeChange: function(rows) { this.rows = rows; this.page = 1; this.qry(); }, //當(dāng)前頁碼發(fā)生變化時,執(zhí)行查詢 handleCurrentChange: function(page) { this.page = page; this.qry(); }, //當(dāng)關(guān)閉對話框時,該方法用于清空表單 closeBookForm: function() { this.bookForm.id=null; this.bookForm.bookname = null; this.bookForm.booktype = null; this.bookForm.price = null; }, //打開對話框,將對話框標(biāo)題設(shè)置為新增,操作類型設(shè)置為'add' addBook: function() { this.dialogName = '新增書本信息'; this.dialogFormVisible = true; this.optiontype = 'add'; }, //打開對話框,將對話框標(biāo)題設(shè)置為修改,操作類型設(shè)置為'update', //并使用獲取的待修改的記錄的值設(shè)置對應(yīng)的表單元素 handleEdit: function(row) { this.dialogName = '編輯書本信息'; this.dialogFormVisible = true; this.bookForm.id=row.id; this.bookForm.bookname = row.bookname; this.bookForm.booktype = row.booktype; this.bookForm.price = row.price; this.optiontype = 'update'; }, //刪除書本記錄 handleDelete: function(row) { console.log("dele = " + row); } } }
3. 新增更新功能
1) 在action.js中加入后臺接口配置。配置時按照自己的項(xiàng)目實(shí)際進(jìn)行,不要照抄
//獲取書本信息 'BOOKMSG_BOOKINFO_REQ':'/bookMsg/bookAction!getBooks.action', //增加書本信息 'BOOKMSG_BOOKINFO_ADD' : '/bookMsg/bookAction!addBook.action', //修改書本信息 'BOOKMSG_BOOKINFO_UPDATE': '/bookMsg/bookAction!updateBook.action', //刪除書本信息 'BOOKMSG_BOOKINFO_DEL': '/bookMsg/bookAction!delBook.action', //VUEX 異步請求后臺數(shù)據(jù) 'VUE_ASYN_REQ':'/userMsg/vueAsynAction!asynAction.action',
2) 在前端調(diào)用接口, 注意在調(diào)用前請確認(rèn)后臺接口可正常使用
圖一:
圖二:
//保存書本信息 saveBook: function() { let url = this.axios.urls.BOOKMSG_BOOKINFO_ADD; //如果當(dāng)前操作類型為update則需要調(diào)用更新接口 if (this.optiontype == 'update') { url = this.axios.urls.BOOKMSG_BOOKINFO_UPDATE; } this.axios.post(url, this.bookForm).then(resp => { //操作成功,關(guān)閉彈出框,執(zhí)行查詢以便于顯示最新數(shù)據(jù) //操作失敗,提示失敗,關(guān)閉彈出框 if (resp.data.success) { this.$message({ message: resp.data.msg, type: 'success' }); this.dialogFormVisible = false; this.qry(); } else { this.$message({ message: resp.data.msg, type: 'error' }); this.dialogFormVisible = false; } }).catch(error => { }) },
4. 刪除功能
//刪除書本記錄 handleDelete: function(row) { let url = this.axios.urls.BOOKMSG_BOOKINFO_DEL+"?id="+row.id; this.axios.delete(url).then(resp => { if(resp.data.success) { this.$message({ message: resp.data.msg, type:'success' }); this.qry(); } else { this.$message({ message: resp.data.msg, type: 'error' }); } }).catch(error => { console.log(error); }) }
在刪除之前需求讓用戶確認(rèn)一下是否刪除,這個功能請自行參數(shù)element-ui官方文檔。
5. 表單驗(yàn)證
查看Element-ui官方文檔Form部分
圖一:
如果需要自定義驗(yàn)證規(guī)則,用法如下圖所示:
圖二
//定義表單驗(yàn)證規(guī)則,validatePrice為自定義驗(yàn)證函數(shù),在下文有具體定義 rules: { bookname: [ {required: true, message: '請輸入書本名', trigger: 'blur'} ], price: [ {required: true, validator: validatePrice, trigger: 'blur' } ], booktype: [ {required: true, message: '請輸入書本類型', trigger: 'blur'} ] }
validatePrice函數(shù)的定義:
//用于驗(yàn)證訂單金額 var validatePrice = (rule, value, callback) => { if(!value){ callback(new Error('請輸入訂單金額')); } else if (isNaN(value)) { callback(new Error('請輸入數(shù)字值')); } else { callback(); } }
表單驗(yàn)證:
//保存書本信息 saveBook: function(formName) { let url = this.axios.urls.BOOKMSG_BOOKINFO_ADD; //調(diào)用表單驗(yàn)證 this.$refs[formName].validate((valid) => { //如果當(dāng)前操作類型為update則需要調(diào)用更新接口 if (this.optiontype == 'update') { url = this.axios.urls.BOOKMSG_BOOKINFO_UPDATE; } this.axios.post(url, this.bookForm).then(resp => { //操作成功,關(guān)閉彈出框,執(zhí)行查詢以便于顯示最新數(shù)據(jù) //操作失敗,提示失敗,關(guān)閉彈出框 if (resp.data.success) { this.$message({ message: resp.data.msg, type: 'success' }); this.dialogFormVisible = false; this.qry(); } else { this.$message({ message: resp.data.msg, type: 'error' }); this.dialogFormVisible = false; } }).catch(error => { }) }); },
定義驗(yàn)證規(guī)則,及rule
圖三
調(diào)用驗(yàn)證,圖四
通過form表單的ref屬性來清空表單驗(yàn)證信息,圖五
6. 接口文檔
接口文檔需要包含的基本要素:
接口地址:
請求方式:get/post/put/delete等
請求示例:舉例說明如何調(diào)用
請求參數(shù):說明請求參數(shù),及存放的位置,如url,form-data, body raw等等。
返回參數(shù):
正確:說明返回的json數(shù)據(jù)
錯誤:指明不同錯誤的代碼及含義
到此這篇關(guān)于Vue數(shù)據(jù)增刪改查與表單驗(yàn)證的實(shí)現(xiàn)流程介紹的文章就介紹到這了,更多相關(guān)Vue增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue+Element UI實(shí)現(xiàn)下拉菜單的封裝
這篇文章主要為大家詳細(xì)介紹了Vue+Element UI實(shí)現(xiàn)下拉菜單的封裝代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09vue項(xiàng)目中使用particles實(shí)現(xiàn)粒子背景效果及遇到的坑(按鈕沒有點(diǎn)擊響應(yīng))
為了提高頁面展示效果,登錄界面內(nèi)容比較單一的,粒子效果作為背景經(jīng)常使用到,vue工程中利用vue-particles可以很簡單的實(shí)現(xiàn)頁面的粒子背景效果,本文給大家分享在實(shí)現(xiàn)過程中遇到問題,需要的朋友一起看看吧2020-02-02Vue實(shí)現(xiàn)預(yù)覽docx/xlsx/pdf等類型文件功能
這篇文章主要介紹了如何在Vue中實(shí)現(xiàn)docx/xlsx/pdf等類型文件預(yù)覽功能,在實(shí)現(xiàn)過程中,需要注意文件的格式和轉(zhuǎn)換方式,以及插件和組件的使用方法和注意事項(xiàng),需要的朋友可以參考下2023-05-05淺談element中InfiniteScroll按需引入的一點(diǎn)注意事項(xiàng)
這篇文章主要介紹了淺談element中InfiniteScroll按需引入的一點(diǎn)注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06vue內(nèi)點(diǎn)擊url下載文件的最佳解決方案分享
這篇文章主要給大家介紹了關(guān)于vue內(nèi)點(diǎn)擊url下載文件的最佳解決方案,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-02-02解決vue prop傳值default屬性如何使用,為何不生效的問題
這篇文章主要介紹了解決vue prop傳值default屬性如何使用,為何不生效的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Vue3獲取和操作DOM元素的項(xiàng)目實(shí)踐
在Vue3中,有時我們需要直接操作DOM節(jié)點(diǎn),本文主要介紹了Vue3獲取和操作DOM元素的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08