Vue數(shù)據(jù)表格增刪改查與表單驗證代碼詳解
一、CRUD實現(xiàn)
1.1 后臺CRUD編寫
package com.ycxw.ssm.controller;
@Controller
@RequestMapping("/book")
public class BookController {
@Autowired
private IBookService bookService;
@RequestMapping("/addBook")
@ResponseBody
public JsonResponseBody<?> addBook(Book book){
try {
bookService.insert(book);
return new JsonResponseBody<>("新增書本成功",true,0,null);
} catch (Exception e) {
e.printStackTrace();
return new JsonResponseBody<>("新增書本失敗",false,0,null);
}
}
@RequestMapping("/editBook")
@ResponseBody
public JsonResponseBody<?> editBook(Book book){
try {
bookService.updateByPrimaryKey(book);
return new JsonResponseBody<>("編輯書本成功",true,0,null);
} catch (Exception e) {
e.printStackTrace();
return new JsonResponseBody<>("編輯書本失敗",false,0,null);
}
}
@RequestMapping("/delBook")
@ResponseBody
public JsonResponseBody<?> delBook(Book book){
try {
bookService.deleteByPrimaryKey(book.getId());
return new JsonResponseBody<>("刪除書本成功",true,0,null);
} catch (Exception e) {
e.printStackTrace();
return new JsonResponseBody<>("刪除書本失敗",false,0,null);
}
}
@RequestMapping("/queryBookPager")
@ResponseBody
public JsonResponseBody<List<Book>> queryBookPager(Book book, HttpServletRequest req){
try {
PageBean pageBean=new PageBean();
pageBean.setRequest(req);
List<Book> books = bookService.queryBookPager(book, pageBean);
return new JsonResponseBody<>("OK",true,pageBean.getTotal(),books);
} catch (Exception e) {
e.printStackTrace();
return new JsonResponseBody<>("分頁查詢書本失敗",false,0,null);
}
}
}1.2 配置訪問路徑
src/api/action.js :
//獲取書本信息 'BOOKMSG_BOOKINFO_REQ': '/book/queryBookPager', //新增書本 'BOOK_ADD': '/book/addBook', //修改書本 'BOOK_EDIT': '/book/editBook', //刪除書本 'BOOK_DEL': '/book/delBook',

1.3 前端編寫(及窗口)
<template>
<div class="Book" style="padding: 30px;">
<!-- 輸入框搜索 -->
<el-form :inline="true" class="demo-form-inline">
<el-form-item label="書籍名稱 : ">
<el-input v-model="bookname" placeholder="書籍名稱"></el-input>
</el-form-item>
<el-form-item>
<el-button type="warning" @click="onSubmit()">查詢</el-button>
<el-button type="warning" icon="el-icon-plus" @click="addBook()">新增</el-button>
</el-form-item>
</el-form>
<!-- 書籍的書籍表格 -->
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="書籍ID"></el-table-column>
<el-table-column prop="bookname" label="書籍名稱"></el-table-column>
<el-table-column prop="price" label="書籍價格"></el-table-column>
<el-table-column prop="booktype" label="書籍類型"></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>
<!-- 分頁 -->
<div class="block" style="padding: 20px;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
background :page-sizes="[10, 20, 30, 40]" :page-size="rows" layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
<!--
彈出窗口:增加和修改書本信息共用一個彈出窗口,需要根據(jù)用戶的選擇動態(tài)的設置彈出窗口的標題
:tile 通過綁定值的方式設置dialog的標題
:visible.sync 控制彈出窗口的顯示或隱藏,.sync同步修飾符
@close="closeBookForm",設置窗口關閉時調(diào)用的處理函數(shù),可用于清空表單
:model="bookForm":用于定義表單對應的model,具體model的定義可見data部分。
v-show="optiontype == 'update'" 通過操作類型控制是否顯示書本編號字段,如果當前操作類型為
新增,則不用顯示,書本編號在數(shù)據(jù)表中是自增的。
:label-width="formLabelWidth" 統(tǒng)一定義標簽的寬度。
:style="{width: formEleWidth}" 統(tǒng)一定義form元素的寬度。
-->
<el-dialog :title="dialogName" :visible.sync="dialogFormVisible" @close="closeBookForm" width="500px">
<el-form :model="bookForm" :rules="rules" ref="bookForm" :label-position="center">
<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" prop="bookname">
<el-input v-model="bookForm.bookname" autocomplete="off" :style="{width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="價格" :label-width="formLabelWidth" prop="price">
<el-input v-model="bookForm.price" autocomplete="off" :style="{width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="類型" :label-width="formLabelWidth" prop="booktype">
<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="saveBook()">確 定</el-button>
</div>
</el-dialog>
</div>
</template>注1:隱藏顯示設置,通過Vue實例對象中的dialogFormVisible="true|false"來控制dialog顯示隱藏
:visible.sync="dialogFormVisible"
注2:通過close或closed事件,在關閉dialog彈出框時清空form表單數(shù)據(jù)和驗證信息;
@close="dialogClose"
1.4 增刪改查實現(xiàn)
<script>
export default {
name: 'BookList',
data() {
return {
bookname: '',
tableData: [],
rows: 10,
total: 0,
page: 1,
//控制對話框是否顯示,默認是隱藏狀態(tài)
dialogFormVisible: false,
//統(tǒng)一控制標簽的寬度
formLabelWidth: '40px',
//統(tǒng)一控制表單元素的寬度
formEleWidth: '400px',
//對話框標題,默認為新增,如果是點擊修改按鈕打開對話框,則標題應為修改。
dialogName: '新增書本',
//操作類型,默認為添加,如果是點擊修改打開對話框,則操作類類型應變?yōu)樾薷?
//該變量用于控制是否顯示書本編號字段,當操作類型為新增時不需顯示(書本編號數(shù)據(jù)表字段為自增)
//當操作類型為修改時,需要顯示。
optiontype: 'add',
//定義表單對應的model
bookForm: {
id: '',
bookname: '',
price: null,
booktype: ''
}
}
},
methods: {
//選擇分頁
handleSizeChange(r) {
//當頁大小發(fā)生變化
let params = {
bookname: this.bookname,
rows: r,
page: this.page
}
this.query(params);
},
//輸入分頁
handleCurrentChange(p) {
//當前頁碼大小發(fā)生變化
let params = {
bookname: this.bookname,
rows: this.rows,
// 分頁
page: p
}
this.query(params);
},
//查詢方法
query(params) {
//獲取后臺請求書籍數(shù)據(jù)的地址
let url = this.axios.urls.BOOKMSG_BOOKINFO_REQ;
this.axios.get(url, {
params: params
}).then(d => {
this.tableData = d.data.rows;
this.total = d.data.total;
}).catch(e => {});
},
onSubmit() {
let params = {
bookname: this.bookname
}
console.log(params)
this.query(params);
this.bookname = ''
},
//當關閉對話框時,該方法用于清空表單
closeBookForm() {
this.bookForm.id = null;
this.bookForm.bookname = null;
this.bookForm.booktype = null;
this.bookForm.price = null;
},
//打開對話框,將對話框標題設置為新增,操作類型設置為'add'
addBook() {
this.dialogName = '新增書本信息';
this.dialogFormVisible = true;
this.optiontype = 'add';
},
//打開對話框,將對話框標題設置為修改,操作類型設置為'update',
//并使用獲取的待修改的記錄的值設置對應的表單元素
handleEdit(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';
},
/* 新增書本 */
saveBook() {
//默認新增
var url = this.axios.urls.BOOK_ADD;
if (this.optiontype == 'update') {
url = this.axios.urls.BOOK_EDIT;
}
console.log(url)
this.axios.post(url, this.bookForm).then(d => {
//關閉窗口
this.closeBookForm();
this.dialogFormVisible = false;
this.query({});
}).catch();
},
//刪除書本記錄
handleDelete(row) {
this.$confirm('此操作將永久刪除該文件, 是否繼續(xù)?', '提示', {
confirmButtonText: '確定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
//獲取刪除書本訪問路徑
var url = this.axios.urls.BOOK_DEL;
this.axios.post(url, {
id: row.id
}).then(r => {
this.$message({
type: 'success',
message: '刪除成功!'
});
this.query({});
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消刪除'
});
});
}
},
created() {
this.query({})
}
}
</script>1.4.1 新增示例

1.4.2 修改示例

1.4.3 刪除示例

二、表單驗證
2.1 設置表單驗證屬性
Form 組件提供了表單驗證的功能,只需要通過 rules 屬性傳入約定的驗證規(guī)則,并將 Form-Item 的 prop 屬性設置為需校驗的字段名即可。校驗規(guī)則參見 async-validator

2.2 自定義驗證規(guī)則
自定義驗證規(guī)則,在data對象,return之前定義。定義完成后可在rules中使用,如下代碼所示。
注意:
最后return時調(diào)用的callback,如果不調(diào)用則驗證。
//定義驗證規(guī)則
rules: {
bookname: [{
//是否必填
required: true,
//提示信息
message: '請輸入書籍名稱',
//事件
trigger: 'blur'
},
{
min: 3,
max: 5,
message: '長度在 3 到 5 個字符',
trigger: 'blur'
}
],
price: [{
required: true,
//自定義規(guī)則
validator: checkPrice,
trigger: 'blur'
}],
booktype: [{
required: true,
message: '請選擇類型',
trigger: 'change'
}]
}2.3 使用規(guī)則
注意:
表單重置時必須先清空表單驗證信息,再清空表單數(shù)據(jù)信息,通過form表單的ref屬性來清空表單驗證信息
this.$refs['bookForm'].resetFields();語法:
this.$refs['需要驗證的表單名稱'].validate((valid) => { if (valid) { //驗證通過 alert('submit!'); } else { //驗證失敗 console.log('error submit!!'); return false; } });
/* 新增書本 */
saveBook() {
this.$refs['bookForm'].validate((valid) => {
if (valid) {
//默認新增
var url = this.axios.urls.BOOK_ADD;
if (this.optiontype == 'update') {
url = this.axios.urls.BOOK_EDIT;
}
console.log(url)
this.axios.post(url, this.bookForm).then(d => {
//關閉窗口
this.closeBookForm();
this.dialogFormVisible = false;
this.query({});
}).catch();
} else {
console.log('error submit!!');
return false;
}
});
},2.4 效果演示

總結
到此這篇關于Vue數(shù)據(jù)表格增刪改查與表單驗證的文章就介紹到這了,更多相關Vue增刪改查與表單驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue如何實現(xiàn)動態(tài)改變地址欄的參數(shù)值
這篇文章主要介紹了vue如何實現(xiàn)動態(tài)改變地址欄的參數(shù)值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
vue使用showdown并實現(xiàn)代碼區(qū)域高亮的示例代碼
這篇文章主要介紹了vue使用showdown并實現(xiàn)代碼區(qū)域高亮的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
vue實現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù)
今天小編就為大家分享一篇vue實現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue-cli使用stimulsoft.reports.js的詳細教程
Stimulsoft?Reports.JS是一個使用JavaScript和HTML5生成報表的平臺。它擁有所有擁來設計,編輯和查看報表的必需組件。該報表工具根據(jù)開發(fā)人員數(shù)量授權而不是根據(jù)應用程序的用戶數(shù)量。接下來通過本文給大家介紹vue-cli使用stimulsoft.reports.js的方法,一起看看吧2021-12-12


