阅读量:0
vue组件的生命周期钩子
今天几乎没有讲什么新内容,就是一起做项目,只有一个小小的知识点,就是关于vue组件的生命周期钩子,其中最重要的四个函数——
beforeCreate():组件创建之间执行
created():组件创建之后立即执行
beforeMount():组件渲染前执行
mounted():组件渲染完毕之后立即执行
项目
最终实现页面——
BankView.vue中负责前端页面显示和调用配置的请求函数——
发现表格的column里面可以嵌套template,template可以配置slot-scope,来指代当前表格,可以用scope.row的方式得到当前行的记录,以便获得记录的任何信息;
尝试了根据表格内容修改column的type,但是最终只是列了下拉表格中包含几个元素,不知道怎样获得当前记录所包含的数组有多少,而且后端查询的时候,如果是findById就查不到BankUser的内容,也就是bankUserList是null的,尝试过设一个计算属性来设置type,但是失败了,导致每一个下拉表格都打不开了
<template> <div> <h1>Bank View</h1> <el-button @click="find" type="primary">search</el-button> <el-button @click="add" type="primary">add</el-button> <br /><br /><br /> <el-input v-model="inputValue" placeholder="请输入id"></el-input> <br /><br /> <el-table :data="bankList" style="width: 100%"> <el-table-column type="expand"> <template slot-scope="props"> <el-table :data="props.row.bankUserList" style="width: 100%"> <el-table-column label="userName" prop="userName"> </el-table-column> <el-table-column label="role" prop="role"> </el-table-column> <el-table-column label="realName" prop="realName"> </el-table-column> <el-table-column label="password" prop="password"> </el-table-column> <el-table-column label="phone" prop="phone"> </el-table-column> <el-table-column label="createTime" prop="createTime"> </el-table-column> <el-table-column label="updateTime" prop="updateTime"> </el-table-column> </el-table> </template> </el-table-column> <el-table-column label="UserNum" width="180"> <template slot-scope="props"> {{ props.row.bankUserList != null ? props.row.bankUserList.length : 0 }} </template> </el-table-column> <el-table-column label="bankId" prop="bankId" width="180"> </el-table-column> <el-table-column label="bankName" prop="bankName" width="180"> </el-table-column> <el-table-column label="bankPhone" prop="bankPhone" width="180"> </el-table-column> <el-table-column label="introduce" prop="introduce" width="300"> </el-table-column> <el-table-column label="money" prop="money" width="180"> </el-table-column> <el-table-column label="rate" prop="rate" width="180"> </el-table-column> <el-table-column label="repayment" prop="repayment" width="180"> </el-table-column> <!-- --> <el-table-column fixed="right" label="操作" width="100"> <template slot-scope="scope"> <el-button @click="deleteBank(scope.row.bankId)" type="text" size="small" >删除</el-button > <el-button type="text" size="small" @click="updateBank(scope.row.bankId)" >编辑</el-button > </template> </el-table-column> </el-table> <!-- 添加的对话框--> <el-dialog :title="title" :visible.sync="dialogFormVisible"> <el-form :model="form" :rules="rules" ref="bankForm"> <el-form-item label="bankName" :label-width="formLabelWidth" prop="bankName" > <el-input v-model="form.bankName" autocomplete="off"></el-input> </el-form-item> <el-form-item label="bankPhone" :label-width="formLabelWidth" prop="bankPhone" > <el-input v-model="form.bankPhone" autocomplete="off"></el-input> </el-form-item> <el-form-item label="introduce" :label-width="formLabelWidth" prop="introduce" > <el-input v-model="form.introduce" autocomplete="off"></el-input> </el-form-item> <el-form-item label="money" :label-width="formLabelWidth" prop="money"> <el-input v-model="form.money" autocomplete="off"></el-input> </el-form-item> <el-form-item label="rate" :label-width="formLabelWidth" prop="rate"> <el-input v-model="form.rate" autocomplete="off"></el-input> </el-form-item> <el-form-item label="repayment" :label-width="formLabelWidth" prop="repayment" > <el-input v-model="form.repayment" autocomplete="off"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="cancel">取 消</el-button> <el-button type="primary" @click="save">保 存</el-button> </div> </el-dialog> </div> </template> <script> import bankApi from "../api/bank"; export default { name: "BankView", created() { this.findAndBankUser(); }, data() { return { bankList: [], bank: {}, inputValue: "", dialogFormVisible: false, // 控制添加的对话框是否可见 title: "", formLabelWidth: "100px", form: { bankName: "", bankPhone: "", introduce: "", money: "", rate: "", repayment: "", }, rules: { bankName: [ { required: true, message: "请输入银行名称", trigger: "blur" }, { min: 2, max: 50, message: "长度在 2 到 50 个字符", trigger: "blur", }, ], bankPhone: [ { required: true, message: "请输入银行电话", trigger: "blur" }, { min: 11, max: 11, message: "长度为11位", trigger: "blur" }, ], introduce: [ { required: true, message: "请输入银行介绍", trigger: "blur" }, { min: 2, max: 200, message: "长度在 2 到 200 个字符", trigger: "blur", }, ], money: [ { required: true, message: "请输入银行存款金额", trigger: "blur" }, ], rate: [{ required: true, message: "请输入银行利率", trigger: "blur" }], repayment: [ { required: true, message: "请输入银行还款期限", trigger: "blur" }, ], }, }; }, computed:{ expandMethod(row){ if(row.bankUserList != null && row.bankUserList.length > 0){ row.type = "expand"; }else{ row.type = "default"; } return row.type; } }, methods: { updateBank(id) { this.title = "编辑银行"; this.dialogFormVisible = true; bankApi.findById(id).then((res) => { if (res.data.code == 200) { if (res.data.data == null) { this.infoMessage("数据库错误,请联系管理员"); } else { this.form = res.data.data; } } else { this.errorMessage(res.data.message); } }); }, deleteBank(id) { this.$confirm("确定要删除编号为" + id + "的数据吗?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }) .then(() => { bankApi.deleteBank(id).then((res) => { if (res.data.code == 200) { this.successMessage("删除了" + res.data.data + "条数据"); this.findAndBankUser(); } else { this.errorMessage(res.data.message); } }); }) .catch(() => { this.$message({ type: "info", message: "已取消删除", }); }); }, save() { // 验证表单 this.$refs.bankForm.validate((validate) => { if (validate) { // 验证通过,可以提交数据 if (this.form.bankId == null || this.form.bankId == 0) { bankApi.saveBank(this.form).then((res) => { if (res.data.code == 200) { this.successMessage("添加了" + res.data.data + "条数据"); // this.successMessage(); this.findAndBankUser(); } else { this.errorMessage(res.data.message); } }); } else { bankApi.updateBank(this.form).then((res) => { if (res.data.code == 200) { this.successMessage("修改了" + res.data.data + "条数据"); this.findAndBankUser(); } else { this.errorMessage(res.data.message); } }); } this.dialogFormVisible = false; this.$refs.bankForm.resetFields(); //重置表单 } }); }, cancel() { this.dialogFormVisible = false; this.$refs.bankForm.resetFields(); //重置表单 }, add() { this.title = "添加银行"; this.dialogFormVisible = true; this.$refs.bankForm.resetFields(); //重置表单 }, find() { if (this.inputValue) { // alert(this.inputValue); this.findById(); } else { this.findAndBankUser(); } }, findById() { bankApi.findById(parseInt(this.inputValue, 10)).then((res) => { // alert(parseInt(this.inputValue, 10)); if (res.data.code == 200) { this.bank = res.data.data; if (this.bank != null) { this.$set(this, "bankList", []); // 清空原有数据 this.bankList.push(this.bank); } else { this.infoMessage("没有找到该银行"); } } else { this.errorMessage(res.data.message); } }); }, findAndBankUser() { bankApi.findAndBankUser().then((res) => { if (res.data.code == 200) { this.bankList = res.data.data; } }); }, successMessage(message) { this.$message({ message: message, type: "success", }); }, infoMessage(message) { this.$message({ message: message, type: "warning", }); }, errorMessage(message) { this.$message.error(message); }, }, }; </script>
bank.js中创建请求函数——
要注意有四种请求方式:
get(查找,需要后端@RequestParam,或使用@PathVariable,前端传参params)、
post(添加,后端需要@RequestBody,前端传参data)、
put(修改,后端需要@RequestBody,前端传参data)、
delete(删除,需要后端@RequestParam,或使用@PathVariable,前端传参params)
还有注意参数名要前后端对应!!!不然就执行不了
import request from '../utils/request'; export default{findById,findAndBankUser,saveBank,deleteBank,updateBank} function findById(id) { return request({ url:'/bank/findById', method:'get', params:{bankId:id} }) } function findAndBankUser(){ return request({ url:'bank/findAndBankUser', method:'get' }) } function saveBank(bank){ return request({ url:'bank/save', method:'post', data:bank }) } function deleteBank(id){ return request({ url:'bank/delete', method:'delete', params:{bankId:id} }) } function updateBank(bank){ return request({ url:'bank/update', method:'put', data:bank }) }