| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 【vue】vue中axios的使用及vue生命周期详解_07 -> 正文阅读 |
|
[JavaScript知识库]【vue】vue中axios的使用及vue生命周期详解_07 |
目录 【前文回顾】👉 vue自定义指令、计算属性、过滤器_06 ? 一. axios请求1. 问题: 首先, ajax 4步非常繁琐;其次jquery中虽然提供了$.ajax()函数,但是仅限于jquery中使用!那么到了vue中,如何一句话发送ajax请求? 2. 解决: 今后只要在vue中发送ajax请求,几乎都用axios 3. 什么是axios: 第三方开发的专门发送ajax请求的基于Promise的函数库。 4. 如何:? ???????? (0). 下载并引入: <script src="js/axios.js"> ???????? (1). 准备: 配置axios统一的基础路径: ???????? axios.defaults.baseURL="http://服务器端所有接口的基础地址" ???????? (2). 发送get请求: ???????? axios.get("服务器端接口地址的相对路径",{ ????????????????? params:{ //发送到服务器端的参数值列表 ????????????????????????? 参数名: 参数值, ????????????????????????? ... : ... ????????????????? } ???????? }).then(result=>{//坑1: 必须用箭头函数! ?只有result一个参数,则省略() ????????????????? //坑2: result不是直接的返回结果 ????????????????????????? ? result.data才是真正的返回结果 ???????? }) ???????? (3). post请求: ???????? axios.post( ????????????????? "服务器端接口地址的相对路径", ????????????????? "参数1=值1&参数2=值2&..." ???????? ).then(result=>{ ????????????????? console.log(result.data) ???????? }) 5. 示例: 使用axios发送ajax请求 6_axios.html
二. 生命周期1. 问题: 在DOM或jq中,如果希望在页面加载后就自动执行一项任务(发送ajax请求),可以写在window.onload或$(function(){ ... })中。但是,vue项目中写哪儿呢? 2. 解决: 今后只要在vue中希望页面加载后自动执行一项任务,都要将代码写在vue对象的生命周期中。 3. 什么是生命周期: new Vue()对象创建过程中所经历的所有阶段。 4. 包括: 4个阶段: ???????? (1). 创建(create)阶段: ???????? a. 创建new Vue()对象,会创建data对象.. ???????? b. 不会创建虚拟DOM树! ???????? (2). 挂载(mount)阶段: ???????? a. 已经创建完new Vue()和data对象... ???????? b. 继续创建虚拟DOM树! ===============以上为必经阶段=============== ???????? (3). 更新(update)阶段: ???????? 只有在data中的变量被修改时,且这个修改会影响到界面时,才自动触发! ???????? (4). 销毁(destroy)阶段: ???????? 只有在主动调用$destroy()函数,释放当前new Vue()对象或组件时才自动触发! 5. vue在每个阶段前后,都分别创建了一个钩子函数/回调函数 ???????? 创建前: beforeCreate (){ ... } ???????? (1). 创建(create)阶段 ???????? 创建后: created(){ ?????????????????????????????????? //已经创建完data对象,可以对data中的变量执行操作。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //但是暂时还没有虚拟DOM树,所以暂时不能操作页面上的元素!——如果操作,也会丢失!因为后续mount会将我们的修改尽数覆盖! ????????????????????????? } ???????? 挂载前: beforeMount(){ ... } ???????? (2). 挂载(mount)阶段 ???????? 挂载后: mounted(){ ?????????????????????????????????? //即有data,可以操作data中的变量 ?????????????????????????????????? //又有虚拟DOM树,可以执行部分DOM操作 ????????????????????????? } ???????? 更新前: beforeUpdate(){ ... } ???????? (3). 更新(update)阶段 ???????? 更新后: updated(){ ... } ???????? 销毁前: beforeDestroy(){ ... } ???????? (4). 销毁(destroy)阶段 ???????? 销毁后: destroyed(){ ... } 6. 示例: 当页面加载完自动发送ajax请求,加载数据到页面 7_lifecycle.html
? 💥 扩展:this判断—8种指向this ?8种指向: 判断this, ?? 1. obj.fun()?? this->obj ?? 2. fun() 或 (function(){ ... })() 或 多数回调函数 或 定时器函数?? this->window ?? 3. new Fun()?? this->new正在创建的新对象 ?? 4. 类型名.prototype.共有方法=function(){ ... }?? this->将来谁调用指谁,同第一种情况 ?? 5. DOM或jq中事件处理函数中的this->当前正在触发事件的DOM元素对象 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果需要使用简化版函数,必须$(this) ?? 6. 箭头函数中的this->箭头函数外部作用域中的this ?? 7. jQuery.fn.自定义函数=function(){ ... }?? this->将来调用这个自定义函数的.前的jQuery子对象, ?? 8. new Vue()中methods中的函数中的this->当前new Vue()对象? ? ? 总结:知识点提炼1. MVVM: 界面View+模型Model+视图模型ViewModel 2. Vue绑定原理: 访问器属性+虚拟DOM树 ???????? 变量被修改时: 访问器属性发出通知,虚拟DOM树扫描并仅更新受影响的元素 3. 虚拟DOM树优点: (1). 小: 只包含可能变化的元素。 (2). 遍历查找快 (3). 修改效率高: 只修改受影响的元素。 (4). 避免重复编码: 已封装DOM增删改查代码 4. Vue功能3步: (1). 先创建增强版的界面: ? a. 整个界面必须包含在一个唯一的父元素下: ? ??通常是<div id="app"> ? c. 触发事件的元素用@click="自定义处理函数名"标记 (2). 再创建new Vue()对象,其中el:指向new Vue()要监控的页面区域 (3). 在new Vue()对象内定义模型对象data和methods ? a.界面所需的所有变量都放在data中 ? b.界面所需的所有事件处理函数都放在methods中 5. 总结: 绑定语法+13种指令 (1). 如果元素的内容需要随变量自动变化: ?{{}} (2). 如果元素的属性值需要随变量自动变化: ?: (3). 控制一个元素显示隐藏: v-show //使用display:none隐藏元素 (4). 控制两个元素二选一显示: ?v-if? v-else //使用删除元素方式隐藏元素 (5). 多个元素多选一显示: v-if? v-else-if?? v-else (6). 只要反复生成多个相同结构的元素组成列表时: v-for ?:key="唯一标识" 强调: 为什么必须加:key="i"?给每个元素副本添加唯一标识。修改数组中某个元素值时,避免重建整个列表,只需要修改一个DOM元素副本即可!提高修改效率。 (7). 只要绑定事件: @? $event (8). 防止用户短暂看到{{}}: v-cloak和v-text (9). 只要绑定原始HTML代码片段内容: v-html (10). 如果元素的内容只在首次加载时绑定一次,之后都不会改变: v-once ???????? 优化: 减少虚拟DOM树中元素个数。 (11). 保护内容中的{{}}不被编译: v-pre (12). 今后只要想获得表单元素的值或状态: v-model 6. 绑定样式: (1). 需要精确修改某一个css属性,就绑定style: ? a. <元素 style="固定样式" :style="{css属性:变量名, ...}" ? data:{ ???????? ... : ... ? } ? b. <元素 style="固定样式" :style="变量名" ? data:{ ???????? css属性名: 属性值, ???????? ... : ... ?? } ? } (2). 只要批量修改一个元素的多个css属性就绑定class ? a. <元素 class="固定class" :class="{class名:变量名, ...}" ? data:{ ??? ... : ... ? } ? data:{ ??? ... : ... ?? } ? } 7. 只要希望在页面加载时自动对元素执行一些初始化操作时就用自定义指令: (1). 添加自定义指令: Vue.directive("自定义指令名",{ ? inserted(domElem){ ? } }) (2). 使用自定义指令: <元素 v-自定义指令名> 8. 今后只要根据其他变量的值动态计算出一个属性值就用计算属性: <元素>{{计算属性}}</元素> new Vue({ ? el:"#app", ? data:{...}, ? methods:{...}, ? computed:{ ????? 计算过程 ????? return 计算结果 ??? } }) 9. 希望将变量的原始值先加工后再显示给用户看时就用过滤器: Vue.filter("过滤器名",function(oldVal, 自定义形参,...){ ? return 加工后的新值 }) <元素>{{ 变量 | 过滤器(实参值, ...) | ... }}</元素> 10. 只要在vue中发送ajax请求,就用axios axios.defaults.baseURL="服务器端接口的公共基础地址部分" axios.get( ? { ??? params:{ 参数名: 参数值, ...? } ? } ? ... result.data... }) 或 axios.post( ? "参数名1=参数值1&参数名2=参数值2&..." ? ... result.data... }) 强调: 在vue内使用axios,then中必须用箭头函数,保持then内this与外部this一致,都指向当前new Vue()对象 11. vue生命周期4个阶段 8个钩子函数 beforeCreate(){ ... } (1). 创建(create) created(){ ... } beforeMount(){ ... } (2). 挂载(mount) mounted(){ ... 经常在这里发送ajax请求 ... } beforeUpdate(){ ... } (3). 更新(update) updated(){ ... } beforeDestroy(){ ... } (4). 销毁(destroy) destroyed(){ ... } 【后文传送门】👉???vue中如何实现组件封装、组件化开发及组件间传参_08 ????
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:37:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |