复习
- *小目标列表
- 新增
- 按键修饰符绑定enter键按下
- 通过v-model获取到输入的待办事项的内容
- 转换成一个待办列表项,放入待办列表中
- 删除
- 在组件内部点击事件,触发一个_自定义事件_del,附带一个待办事项
- 通过事件冒泡,将要删除的待办事项传递给了外部,外部监听自定义事件del,分派给处理函数,附带的待办事项就是处理函数的参数
- 处理函数内部,删除待办列表中的该待办事项
- 分状态列表展示
- 计算属性,根据选择的状态,筛选展示的数据 Array.filter(筛选函数)
- 页面展示的是计算属性
- 分状态统计
- 计算属性:根据状态筛选计算
- 勾选改变状态
- 在组件内部更新状态
- 修改内容
- html属性 contenteditable
- 获得焦点 focus 存原始数据
- 失去焦点 blur 保存修改
- 按键esc 重置数据为原始数据
- Vue编程的一大特点:做数据处理,不涉及DOM操作
- 新增
- 插槽 ```html
Vue.component(‘submit-button’,{ template:`
`
})
Vue.component(‘base-layout’,{ template:`
一个组件对外的接口有哪些?- props 属性- 自定义事件- slot 插槽3. elementui的使用- 导入链接:- 样式- vue.js- elementui.js- 看文档- 示例代码- 属性 事件 slot method 文档- 布局 24栏- el-row el-col- span属性 offset偏移- 响应式 xs sm md lg xl- container- el-container el-header el-main el-footer el-aside- form table 走马灯 dialog message ....Q&A:1. 前后端传值1. 使用get方法,{params:{k:v}}1. 使用post方法,跟对象 直接用this.form @RequestBody接受1. 回调函数用箭头函数,解决this绑定问题,this指向vue实例1. 回调函数的返回值的结构 response.data<=>返回的result2. 格式化 状态 日期```html<!-- 格式化器 --><el-table-columnprop="state":formatter="stateFormatter"label="状态"></el-table-column>methods:{stateFormatter(row, column, cellValue, index){switch(cellValue){case 'wait': return '待审核';case 'normal': return '审核通过';case 'fail': return '审核失败';default : console.error("错误的状态"+cellValue+",无法格式化");}},..}
spring:mvc:format:date-time: yyyy-MM-dd HH:mm:ssjackson:date-format: yyyy-MM-dd HH:mm:ss
- 根据条件显示按钮
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><!-- 引入样式 --><linkrel="stylesheet"href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"/><title>Document</title></head><body><div id="app"><el-container><el-header><el-menu default-active="1" class="el-menu-demo" mode="horizontal"><el-menu-item index="1">处理中心</el-menu-item><el-submenu index="2"><template slot="title">我的工作台</template><el-menu-item index="2-1">选项1</el-menu-item><el-menu-item index="2-2">选项2</el-menu-item><el-menu-item index="2-3">选项3</el-menu-item><el-submenu index="2-4"><template slot="title">选项4</template><el-menu-item index="2-4-1">选项1</el-menu-item><el-menu-item index="2-4-2">选项2</el-menu-item><el-menu-item index="2-4-3">选项3</el-menu-item></el-submenu></el-submenu><el-menu-item index="3" disabled>消息中心</el-menu-item><el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item></el-menu></el-header><el-main><el-form :inline="true" :model="searchForm" class="demo-form-inline"><el-form-item label="教师姓名"><el-input v-model="searchForm.teacherName" placeholder="教师姓名"></el-input></el-form-item><el-form-item label="审核状态"><el-select clearable v-model="searchForm.state" placeholder="审核状态"><el-option label="待审核" value="wait"></el-option><el-option label="审核通过" value="normal"></el-option><el-option label="审核失败" value="fail"></el-option></el-select></el-form-item><el-form-item><el-button type="primary" @click="search">查询</el-button><el-button type="success" @click="addTeacherDialogVisible=true" icon="el-icon-plus" circle></el-button></el-form-item></el-form><el-row><el-col ><el-table:data="tableData"style="width: 100%"><el-table-columnprop="teacherId"label="教师ID"width="180"></el-table-column><el-table-columnprop="teacherName"label="教师姓名"width="180"></el-table-column><!-- 格式化器 --><el-table-columnprop="state":formatter="stateFormatter"label="状态"></el-table-column><el-table-columnprop="email"label="邮箱"></el-table-column><el-table-columnlabel="操作"><template slot-scope='scope'><el-button v-if='scope.row.state=="wait"' @click="audit(scope.row,true)" type="text" size="small">审核通过</el-button><el-button v-if='scope.row.state=="wait"' @click="audit(scope.row,false)" type="text" size="small">审核失败</el-button><el-button v-if='scope.row.state=="normal"' @click="fire(scope.row)" type="text" size="small">开除</el-button></template></el-table-column></el-table><el-paginationbackgroundlayout="prev, pager, next,sizes":total="page.total":current-page='page.current':page-size='page.size'@current-change='search'></el-pagination></el-col></el-row></el-main></el-container><el-dialog title="新增讲师" :visible.sync="addTeacherDialogVisible"><el-form :model="addTeacherForm"><el-row><el-col :span='15'><el-form-item label="讲师姓名" label-width="180px"><el-input v-model="addTeacherForm.teacherName" autocomplete="off"></el-input></el-form-item></el-col></el-row><el-row><el-col :span='15'><el-form-item label="生日" label-width="180px"><el-date-pickerv-model="addTeacherForm.birthday"type="date"format="yyyy-MM-dd"value-format="yyyy-MM-dd HH:mm:ss"placeholder="选择生日"></el-date-picker></el-form-item></el-col></el-row><el-form-item label="email" label-width="180px"><el-input v-model="addTeacherForm.email" autocomplete="off"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="addTeacherDialogVisible = false">取 消</el-button><el-button type="primary" @click="addTeacher">新增</el-button></div></el-dialog></div><script src="https://unpkg.com/vue/dist/vue.js"></script><!-- 引入组件库 --><script src="https://unpkg.com/element-ui/lib/index.js"></script><script src="https://unpkg.com/axios/dist/axios.min.js"></script><script>let app = new Vue({el:'#app',data:{page:{total:0,current:1,size:10},searchForm:{teacherName:'',state:''},formLabelWidth:"80px",addTeacherForm: {teacherName: '',email:'',birthday:''},addTeacherDialogVisible:false,tableData:[]},mounted(){this.search(1);},methods:{addTeacher(){console.log(this.addTeacherForm)axios.post('http://localhost:8000/addNewTeacher',this.addTeacherForm).then(resp=>{this.$message({message:"新增成功",type:"success"});this.search(1);this.addTeacherDialogVisible=false;}).catch(resp=>{this.$message({message:"操作失败",type:"warning"});this.addTeacherDialogVisible=false;})},stateFormatter(row, column, cellValue, index){switch(cellValue){case 'wait': return '待审核';case 'normal': return '审核通过';case 'fail': return '审核失败';default : console.error("错误的状态"+cellValue+",无法格式化");}},audit(row,pass){console.log(row,pass);axios.post('http://localhost:8000/audit',{"teacherId":row.teacherId,"pass":pass}).then(resp=>{this.$message({message:"审核操作完成",type:"success"});this.search(1);}).catch(resp=>{this.$message({message:"操作失败",type:"warning"});})},fire(row){},handleClick(row){console.log(row);this.dialogFormVisible=true;// this.$message({message:'你查看成功了',type:'warning'});},search(current){//发请求到后端,搜索数据let param = this.searchForm;param.pageIndex=current;param.pageSize=this.page.size;axios.get('http://localhost:8000/queryTeacher',{params:param}).then(resp=>{if(resp.status=200&&resp.data.success){let data = resp.data.data;this.tableData=data.records;//将后端返回的数据绑定到分页条上this.page.total=data.total;this.page.current=data.current;this.page.size=data.size;}else{this.$message({message:'查询失败,'+resp.data.message,type:'warning'})}}).catch(error=>{this.$message({message:'查询失败,'+error.message,type:'error'})})}}});</script></body></html>
分页
<el-paginationbackgroundlayout="prev, pager, next,sizes":total="page.total" 总条数:current-page='page.current' 当前页:page-size='page.size' 页容量@current-change='search' 当前页码改变时间,回传改变后的页码></el-pagination>search(current){//发请求到后端,搜索数据let param = this.searchForm;param.pageIndex=current;param.pageSize=this.page.size;axios.get('http://localhost:8000/queryTeacher',{params:param}).then(resp=>{if(resp.status=200&&resp.data.success){let data = resp.data.data;this.tableData=data.records;//将后端返回的数据绑定到分页条上this.page.total=data.total;this.page.current=data.current;this.page.size=data.size;}else{this.$message({message:'查询失败,'+resp.data.message,type:'warning'})}}).catch(error=>{this.$message({message:'查询失败,'+error.message,type:'error'})})}}
JS发展
nodejs js运行时环境 让js脱离浏览器,在电脑上运行
- 后端代码,创建httpserver,接受http请求,并且响应;可以访问数据库;可以创建文件读取文件
- 框架 express / sequelize
- 桌面端应用程序
- 框架 electron
- 移动端应用程序
- react-native
- vue -> uniapp / weex
npm nodejs 自带的包管理器,功能类似于maven的依赖管理
webpack 打包工具,类似于Maven的构建流程
html => pug模板,简化html的编写
css => sass / less css拓展语言
js => typescript / coffeescript 升级
安装Node环境
- nodejs 自带npm
https://nodejs.org/zh-cn/
安装,下一步,下一步
- 测试
node -vnpm -v - 编写一个例子
# 编写一个helloworld.js,内容如下console.log("hello world");# 通过node命令运行node helloworld.js
```javascript var mysql = require(‘mysql’); var http = require(‘http’);npm initnpm install mysql# 编写index.js,内容如下# 运行node index.js# 访问 localhost:8888 即可在控制台看到数据
http.createServer(function (request, response) {
// 发送 HTTP 头部// HTTP 状态值: 200 : OK// 内容类型: text/plainresponse.writeHead(200, {'Content-Type': 'text/plain'});var connection = mysql.createConnection({host: 'localhost',port:3306,user: 'root',password: 'root123',database: 'edu_56'});connection.connect();connection.query('SELECT * from edu_teacher', function (error, results, fields) {if (error) throw error;console.log('The solution is: ', results);// 发送响应数据 "Hello World"response.end(results);});
}).listen(8888);
// 终端打印如下信息 console.log(‘Server running at http://127.0.0.1:8888/‘);
4. 安装taobao的npm源```bashnpm i -g cnpm --registry=https://registry.npm.taobao.org
vue-cli
安装
cnpm install -g @vue/clivue -V
创建项目
# cmdvue create my-project# 界面vue ui





cd vue56npm run serve# 访问 IP:8080 看到界面
作业
- 完成讲师管理练习,新增一个修改讲师的功能,点击修改则弹窗,修改完成后刷新列表
- 创建并运行一个vue脚手架项目
