第9讲 基于Vue+Express+ElementUI+MySQL的简单数据库应用
9.1Express框架
Express是目前最流行的基于Node.js平台的快速、开放、极简的Web开发框架,提供了快速创建Web服务器的便捷方法。
Express框架特性如下:
(1)提供了方便简洁的路由定义方式。
(2)对获取HTTP请求参数进行了简化。
(3)拥有大量第三方中间件对功能进行扩展。
(4)提供了中间件机制有效控制HTTP请求。
(5)对模板引擎支持程度高,方便渲染动态HTML页面。
Express可以接收并处理http post请求和http get请求。
本讲将讲解Vue前端页面通过后端Express Web服务器完成对MySQL数据库的访问和操作的全过程。创建可以访问MySQL数据库的后端Express Web服务器,需要安装三个依赖包,分别是express、mysql和body-parser。
9.2 ElementUI
ElementUI(官网地址为“https://element.eleme.cn/#/zh-CN”),是“饿了么”公司(隶属于上海拉扎斯信息科技有限公司)出品的一套基于Vue 实现的一套丰富的不依赖业务的开源 UI 组件库,简化了常用组件的封装,提高了重用性原则,降低了开发的难度,可以大大提高Vue开发效率。
ElementUI提供了6大类60多种组件,这6大类分别是:Basic、Form、Data、Notice、Nagivation、Others。要求同学根据各自项目的开发需要学习并选用这些组件。
下面将通过4个例子熟悉ElementUI+vue的基本编程方法,
(1)helloworld.html
Try ElementUI!
new Vue({
el: '#app',
data: {
visible: false
}
});
(2)fom.html
var vm=new Vue({
el:"#app",
data:{
form: {
name: '',
region: '',
date: '',
delivery: false,
type: [],
resource: '',
desc: ''
}
},
methods: {
onSubmit() {
let date = this.form.date;
let year = date.getFullYear(); // 年
let month = date.getMonth() + 1; // 月
let day = date.getDate(); // 日
//利用使用${expression}嵌入语法动态生成“提示信息字符串”。
let result=`${this.form.name},${this.form.region}地区,活动日期:${year}年${month}月${day}日,${this.form.delivery==true?"即时配送":"不即时配送"},${this.form.type},${this.form.resource},活动形式:${this.form.desc}`
console.log(result);
//Notification通知组件给出“提交信息”。
this.$notify({title: '提交信息',message: result,duration: 2000});
},
onCancel(){
this.form.name='';
this.form.region='';
this.form.date=new Date();
this.form.delivery=false;
this.form.type=[];
this.form.resource='';
this.form.desc='';
}
},
created(){
this.form.date=new Date();
}
});
(3)dialog.html
.el-dialog{
display: flex;
flex-direction: column;
margin:0 !important;
position:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);
/*height:600px;*/
max-height:calc(100% - 30px);
max-width:calc(100% - 30px);
}
.el-dialog .el-dialog__body{
flex:1;
overflow: auto;
}
var vm=new Vue({
el:"#app",
data:{
form: {
name: '',
region: '',
date: '',
delivery: false,
type: [],
resource: '',
desc: ''
},
centerDialogVisible: false
},
methods: {
onSubmit() {
let date = this.form.date;
let year = date.getFullYear(); // 年
let month = date.getMonth() + 1; // 月
let day = date.getDate(); // 日
let result=`${this.form.name},${this.form.region}地区,活动日期:${year}年${month}月${day}日,${this.form.delivery==true?"即时配送":"不即时配送"},${this.form.type},${this.form.resource},活动形式:${this. form.desc}`
console.log(result);
this.$notify({title: '提交信息',message: result,duration: 2000});
},
onCancel(){
this.form.name='';
this.form.region='';
this.form.date=new Date();
this.form.delivery=false;
this.form.type=[];
this.form.resource='';
this.form.desc='';
}
},
created(){
this.form.date=new Date();
}
});
(4)table.html
<!--以下代码利用模板列实现操作按钮功能,注意利用slot-scope属性获取每行的索引和行-->
slot-scope="scope">
var vm=new Vue({
el: '#app',
data: {
tableData:
[
{"studentNum": "201811104001","name": "姜永霞","class": "软件181","gender": "女"},
{"studentNum": "201811104002","name": "齐宏智","class": "软件181","gender": "女"},
{"studentNum": "201811104003","name": "王文文","class": "软件181","gender": "女"},
{"studentNum": "201811104004","name": "高菲","class": "软件181","gender": "女"},
{"studentNum": "201811104005","name": "赵鑫","class": "软件181","gender": "女"},
{"studentNum": "201811104006","name": "骆加祥","class": "软件181","gender": "男"}
]
},
methods: {
handleClick(index, row) {
console.log("查看");
console.log(index, row);
let info=`查看第${index}行,学号:${row.studentNum},姓名:${row.name}`
console.log(info);
this.$notify({title: '信息提示',message: info,duration: 2000});
},
handleEdit(index, row) {
console.log("编辑");
console.log(index, row);
let info=`编辑第${index}行,学号:${row.studentNum},姓名:${row.name}`
console.log(info);
this.$notify({title: '信息提示',message: info,duration: 2000});
},
handleDelete(index, row) {
console.log("删除");
console.log(index, row);
let info=`删除第${index}行,学号:${row.studentNum},姓名:${row.name}`
console.log(info);
this.$notify({title: '信息提示',message: info,duration: 2000});
}
}
});