1. 知识回顾

1.1 Axios案例

1.1.1 Ajax发展史

  1. JS的原生Ajax操作 处理复杂 不便于使用.
  2. jQuery 是JS的高级函数类库. 封装了很多的API 简化程序调用的过程 (回调地狱: Ajax嵌套问题)
  3. promise对象 将Ajax嵌套的结构 转化为链式加载的结构. ajax.get().then(xxxxxx)
    4. Axios 主要封装了promise对象. 将调用变得更加的简化. 整合VUE.js中大部分条件下都整合axios 发起ajax请求.

1.1.2 请求的类型

http常用的请求类型 8种 但是一般四种需要单独的记忆.

  1. 查询操作时 GET请求类型 特点: 参数结构key=value URL?key=value&key2=value2

  2. 新增(form表单) POST请求类型 特点: 会将参数封装到请求头中 相对更加的安全 key=value key2=value2 可以直接采用对象的方式接收.
    Axios中的post 参数是一个JSON串 {key1:vallue1, key2:value2} 将JSON串转化为对象 @RequestBody

  3. 删除操作 DELETE请求类型 特点:与GET请求类型 一致的.

  4. 更新操作 PUT请求类型 特点: 与POST请求类型一致的.

  5. RestFul风格: 在上述的四大请求类型中都可以使用(单独的体系) 参数使用/分割 注意参数结构 灵活选用.

1.2 Axios作业-删除数据

1.2.1 编辑页面JS

为删除按钮添加点击事件

编辑页面JS 发起Ajax请求

请求方式说明:

1.2.2 编辑Controller方法

1.2.3 编辑Service方法

1.3 Axios作业-修改数据

1.3.1 业务说明

  1. 准备修改的DIV 其中包含4部分数据. name/age/sex where id!!!
  2. 当用户点击修改按钮时,应该实现数据的回显.
  3. 当用户已经修改完成之后,需要点击提交按钮时 应该发起ajax请求实现数据修改操作.

注意事项:
在vue.js中看到了INPUT框, 则表示双向数据绑定. 必须在data中定义属性.

1.3.2 编辑页面JS

  1. 定义修改html标签
  2. 定义修改的对象 updateUser 并且双向数据绑定
  3. 为提交按钮添加点击事件. 实现ajax参数提交.
  4. 清空已提交的数据,重新获取列表信息.
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>VUE-Axios练习</title></head><body><!-- 定义VUE根标签 --><div id="app"><div align="center"><h1 align="center">用户新增</h1>名称: <input type="text" v-model.trim="addUser.name"/>年龄: <input type="text" v-model.number="addUser.age"/>性别: <input type="text" v-model.trim="addUser.sex"/><button @click="addUserMe">新增</button></div><hr /><div align="center"><!-- 需求: ID是修改操作的必备参数,用户不可以修改 disabled="false" JS规范如果设定true 可以简化为key--><h1 align="center">用户修改</h1>编号: <input type="text" v-model.trim="updateUser.id"  disabled />名称: <input type="text" v-model.trim="updateUser.name"/>年龄: <input type="text" v-model.number="updateUser.age"/>性别: <input type="text" v-model.trim="updateUser.sex"/><!-- 当用户修改完成之后,点击提交按钮时发起ajax请求. --><button @click="updateUserMe">提交</button></div><hr /><table id="tab1" border="1px" align="center" width="80%"><tr><td colspan="5" align="center"><h1>用户列表</h1></td></tr><tr align="center"><td>编号</td><td>姓名</td><td>年龄</td><td>性别</td><td>操作</td></tr><!-- 指令: 可以循环数据+标签  v-for --><tr align="center" v-for="user in userList"><td v-text="user.id"></td><td v-text="user.name"></td><td v-text="user.age"></td><td v-text="user.sex"></td><td><!-- 为修改按钮添加点击事件 传递当前行对象 --><button @click="updateUserBtn(user)">修改</button><!-- 为当前user对象绑定点击事件 --><button @click="deleteUser(user)">删除</button></td></tr></table></div><!-- 1.引入VUE.js --><script src="../js/vue.js"></script><!-- 2.引入Axios.js --><script src="../js/axios.js"></script><!-- 需求分析1:1.当用户打开页面时就应该发起Ajax请求获取userList数据.2.将userList数据 在页面中展现  2.1页面中的数据必须在data中定义2.2 ajax请求的结果赋值给data属性3.利用v-for指令实现数据遍历需求分析2:  用户数据入库操作1.在页面中准备用户新增文本框/按钮2.准备双向数据绑定的规则3.为按钮添加事件,实现数据新增入库.--><script>//设定axios请求前缀axios.defaults.baseURL = "http://localhost:8090"const app = new Vue({el: "#app",data: {//1.定义集合数据 nulluserList: [],//2.定义addUser对象  新增的用户数据addUser: {name: '',age: 0,sex: ''},//定义一个修改的数据封装体updateUser: {id: '',name: '',age: 0,sex: ''}},methods: {//1.定义getuserList方法 获取后台服务器数据async getUserList(){let{data: result} = await axios.get("/vue/getUserList")//ajax调用之后,将数据给属性.this.userList = result},//新增操作 请求类型: post  接收时需要使用json方式处理async addUserMe(){//不需要返回值await axios.post("/vue/insertUser",this.addUser)//将列表页面重新刷新this.getUserList()},async deleteUser(user){//console.log(user)//只需要获取用户的ID 就可以完成删除的操作.//方法选择 ?id=xx 拼接    |  restFul结构let id = user.idawait axios.delete("/vue/deleteUser?id="+id)alert("删除数据成功!!!")//需要重新获取列表数据this.getUserList()/* await axios.delete(`/vue/deleteUser?id=${id}`) */},//点击修改按钮时触发事件updateUserBtn(user){//console.log(user)//用户传递的User对象应该动态的传递给双向数据绑定的key updateUserthis.updateUser = user},//1.是否发起ajax请求 2.参数是谁? updateUser 3.什么请求类型PUT//this.updateUser是JS对象 传递到后端JSON串 @RequestBodyasync updateUserMe(){await axios.put("/vue/updateUser",this.updateUser)//如果操作成功,则应该清空修改的对象this.updateUser = {}//如果操作成功,则重新获取列表信息this.getUserList()alert("修改操作成功!!!!")}},//调用生命周期函数 8个mounted(){//console.log("vue对象实例化成功!!!!")//初始化时调用getUserList()this.getUserList()}})</script></body>
</html>

请求参数详情信息:

1.3.3 编辑后端Controller

接收前端传递的数据, 完成数据修改操作

1.3.4 编辑后端Service

2 组件化思想

2.1 组件化说明

说明: 传统的页面开发,会将大量的HTML/CSS/JS进行引入,但是引入之后结构混乱 不便于管理. 开发维护时 成本较高.
组件化思想:
在VUE中 可以将一个组件,看作是一个页面. 在其中可以引入独立的样式/JS/HTML 进行单独的管理.
组件可以进行复用.
关键字: 组件–页面 (html/css/js)

2.2 组件入门案例

2.2.1 组件入门写法

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>组件化</title></head><body><h1>组件化结构</h1><div id="app"><!-- 1.需求 编辑一首静夜思 但是要求代码尽可能复用. 实现策略: 组件化思想2.组件化步骤:1.定义组件   全局组件: 任意的DIV都可以引入该组件局部组件: 只有特定的DIV可以引入组件2. 编辑组件的key(注意驼峰规则的写法)    编辑组件体 特殊语法: 定义属性时 data(){return{ key:value}}html标签: 使用template进行标记3.通过key对组件进行引用.--><!-- 1.组件标签的使用 放到app标签之内 才能解析2.如果采用驼峰规则命令则中间使用-线连接--><hello-com></hello-com><hello-com></hello-com><hello-com></hello-com></div>  <!-- 定义组件的模版html 注意事项: 1.切记标识在app之外!!!!2.要求模版字符串必须有根标签 div       --><template id="helloTem"><div><h3>静夜思</h3>床前明月光,疑是地上霜。举头望明月,低头思故乡。引入属性: {{msg}}</div></template><!-- 引入JS文件 --><script src="../js/vue.js"></script><script>/* 1.定义组件 */Vue.component("helloCom",{//定义属性  必须添加return 返回值data() {return {msg: "我是一个组件"}},template: "#helloTem"})const app = new Vue({el:  "#app",data: {},methods: {}})</script></body>
</html>

2.2.2 局部组件

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>组件化</title></head><body><h1>局部组件</h1><div id="app"><hello-com></hello-com><hello-com></hello-com><hello-com></hello-com></div><template id="helloTem"><div><h1>我是局部组件AAAAAAAAA</h1>属性取值: {{msg}}</div></template>   <!-- 引入JS文件 --><script src="../js/vue.js"></script><script>//声明组件let helloCom = {//属性定义data(){return {msg: "我是局部组件"}},template: "#helloTem"}/* 说明:只能在某个VUE的对象之内,使用组件标签 */const app = new Vue({el:  "#app",data: {},methods: {},//定义局部组件components: {//组件key: 组件体helloCom: helloCom}})</script></body>
</html>

2.2.3 key-value 简化写法

3. VUE中的路由

3.1 路由介绍

说明: 用户发起一个请求,在互联网中经过多个站点的跳转.最终获取服务器端的数据. 把互联网中网络的链路称之为路由. (网络用语)
VUE中的路由: 根据用户的请求URL地址,展现特定的组件(页面)信息. (控制用户程序跳转过程)

3.2 路由步骤

  1. 导入路由.JS
  2. 指定路由的跳转链接
  3. 定义路由的填充位.
    ** 4. 封装组件信息, 指定路由对象 (难!!!)**
  4. 在VUE对象中声明路由

3.3 路由入门案例

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>路由入门案例</title></head><body><div id="app"><!-- <a href="设定跳转的地址">百度</a> --><!-- 二:定义链接1.router-link 被编译之后转化为a标签2.关键字 to    被编译之后转化为href属性--><router-link to="/user">用户</router-link><router-link to="/dog">狗狗</router-link><!--三: 指定路由的填充位置 未来展现组件信息 填充的位置被解析之后 就是一个DIV--><router-view></router-view></div><!-- 定义组件的标签体 --><template id="userTem"><div><h3>用户信息</h3></div></template><template id="dogTem"><div><h3>狗狗信息</h3></div></template><!-- 1.导入路由JS    先导入vue.js  再导入路由.js 顺序问题 --><script src="../js/vue.js"></script><script src="../js/vue-router.js"></script><script>/*** 第四步: 准备组件,定义路由对象*/let userCom = {template: "#userTem"}let dogCom= {template: "#dogTem"}/*** 定义路由对象* routes:  路由的多个映射通过该属性进行定义.*/let vueRouter = new VueRouter({routes: [{path: "/user", component: userCom},{path: "/dog",  component: dogCom}]})const APP = new Vue({el: "#app",data: {},//实现路由的挂载router: vueRouter})</script></body>
</html>

3.4 重定向和转发

注意事项: 请求和转发都是服务器行为 不会做额外的操作

3.4.1 转发问题

说明: 用户访问服务器,但是目标服务器无法处理该请求,由服务器内部将请求交给其他服务器处理. 这个过程称之为转发.

3.4.2 重定向问题

说明: 用户访问服务器,但是目标服务器无法处理该请求,目标服务器返回一个能够处理请求的网址.由用户再次发起请求,访问服务器获取数据.

3.4 路由关键字

  1. redirect 路由的重定向
    需求: 要求用户访问 "/"根目录 要求重定向到 "/user"请求路径中.

3.5 作业

1.掌握组件/路由/axios的基本用法 语法!!!
2.根据VUE_demo 了解什么是路由嵌套规则.

CGB2105-Day09相关推荐

  1. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  2. Python菜鸟入门:day09数据结构

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  3. day09【后台】权限控制-下

    day09[后台]权限控制-下 1.目标5:密码加密 1.1.修改数据库表结构 由于之前使用MD5加密,密码字段长度为32位:现采用带盐值的加密,需要修改密码字段的长度 顺带把密码也改了 1.2.注入 ...

  4. 谷粒商城 Day09 首页分类与SpEL动态缓存切面

    Day09 首页分类与SpEL动态缓存切面 一.优化缓存逻辑 百万并发进来,判断 bloomFilter 和缓存中拿,先执行哪个最好?1. 先布隆 ,再缓存 面对攻击 1 好 2. 先缓存 ,再布隆 ...

  5. Python学习笔记--day09 函数 模块 (文件、路径操作)

    第二模块 函数&模块 第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题. 函数,一个用于专门实现某个功能的代码块(可重用). 内置函数 len.bin ...

  6. java学习笔记day09 final、多态、抽象类、接口

    java学习笔记day09 思维导图 final . 多态 . 抽象类 . 接口 (都很重要) 一.final 二.多态 多态中的成员访问特点⭐ [P237] 多态的好处 [P239] 多态的弊端 向 ...

  7. day09 面向对象

    day09 面向对象 1.1 概述 面向过程 : 侧重分步骤 比如做菜 1 买菜,买各种食材,买各种调料 2 开火,烧油 3 翻炒 4 出锅 - 面向对象 : 侧重分类/模块 比如做菜 1 完成做菜, ...

  8. day09 书城项目第三阶段

    day09 书城项目第三阶段 1. 项目准备工作 1.1 创建Module 1.2 拷贝jar包 数据库jar包 Thymeleaf的jar包 1.3 从V2版本项目迁移代码 1.3.1 迁移src目 ...

  9. Day09 字符串2(一生之敌,KMP)

    Day09 字符串2 一.28. 实现 strStr() 二.459.重复的子字符串 一.28. 实现 strStr() class Solution {public int strStr(Strin ...

  10. 代码随想录Day09:28. 实现 strStr()、459.重复的子字符串、字符串总结 、双指针回顾

    目录 Day09:28. 实现 strStr().459.重复的子字符串.字符串总结 .双指针回顾 28. 实现 strStr() (一刷只看了思想) 459.重复的子字符串 (本题一刷跳过了) 字符 ...

最新文章

  1. LeetCode: Jump Game II
  2. Vue实战狗尾草博客后台管理系统
  3. Windows 7删需要权限的文件
  4. linux 使用spinlock的配对关系问题
  5. 太酷了!Linux的30 个实例详解 TOP 命令!
  6. 使用openssl生成双向加密证书(转)
  7. 【AC自动机】【数据结构】【树】【Aho-Corasick automation】AC自动机理解(入门)...
  8. 红宝书阅读笔记——OPENGL渲染管线
  9. 【演讲实录】RWP团队谈SQL优化
  10. data.length 提示undefined 问题解决
  11. 从年末生产故障解锁RocketMQ集群部署的最佳实践
  12. ps切图后 JAVA开发_2018年设计师都在用的PS切图插件--摹客
  13. 分镜头剧本模板、故事图模板
  14. Word:公式编辑器亲密接触(转)
  15. BZOJ4715 囚人的旋律
  16. ERP基础数据 金蝶
  17. mui实现APP中的支付宝支付
  18. java的regex_java regex 简单使用
  19. python days03
  20. 【安全攻防知识-3】学习平台搭建汇总

热门文章

  1. 【转载】知道创宇研发技能表3.1
  2. spring-IOC-三更的扩展版
  3. 诛仙哪里炼器服务器最稳定,告别炼器难 《诛仙2》顶级炼器师云集诛仙电台
  4. HttpGET和POST的详细区别
  5. 上顿号符号_标点符号(1):谈谈顿号的用法
  6. table 表格的一些属性
  7. OSPF高级配置——学习OSPF路由协议的高级应用
  8. 周鸿袆:360回归A股不是为炒股 是出于国家安全考虑
  9. 四年级下册计算机课本目录,人教版小学四年级数学教材下册目录;
  10. 华强北再也没法生产散装 iPhone 了