含义讲解:
1.当$destroy()被调用 – 比如组件DOM被移除(例v-if)
2.beforeDestroy – 生命周期钩子函数被执行
3.拆卸数据监视器、子组件和事件侦听器
4.实例销毁后, 最后触发一个钩子函数
5.destroyed – 生命周期钩子函数被执行
components/Life.vue - 准备生命周期方法(Life组件即将要被删除)
主要: App.vue - 点击按钮让Life组件从DOM上移除 -> 导致Life组件进入销毁阶段
<button @click=“show = false”>销毁组件
2.0_axios基本使用
特点
-
支持客户端发送Ajax请求
-
支持服务端Node.js发送请求
-
支持Promise相关用法
-
支持请求和响应的拦截器功能
-
自动转换JSON数据
-
axios 底层还是原生js实现, 内部通过Promise封装的
axios的基本使用
axios({
method: ‘请求方式’, // get post
url: ‘请求地址’,
data: { // 拼接到请求体的参数, post请求的参数
xxx: xxx,
},
params: { // 拼接到请求行的参数, get请求的参数
xxx: xxx
}
}).then(res => {
console.log(res.data) // 后台返回的结果
}).catch(err => {
console.log(err) // 后台报错返回
})
2.1_axios基本使用-获取数据
目标: 调用文档最后_获取所有图书信息接口
功能: 点击调用后台接口, 拿到所有数据 – 打印到控制台
接口: 参考预习资料.md – 接口文档
引入: 下载axios, 引入后才能使用
效果:
例子如下:
components/UseAxios.vue
1. 获取所有图书信息
<button @click=“getAllFn”>点击-查看控制台
2.2_axios基本使用-传参
目标: 调用接口-获取某本书籍信息
功能: 点击调用后台接口, 查询用户想要的书籍信息 – 打印到控制台
接口: 参考预习资料.md – 接口文档
效果:
例子如下:
components/UseAxios.vue
2. 查询某本书籍信息
<button @click=“findFn”>查询
2.3_axios基本使用-发布书籍
目标: 完成发布书籍功能
功能: 点击新增按钮, 把用户输入的书籍信息, 传递给后台 – 把结果打印在控制台
接口: 参考预习资料.md – 接口文档
效果:
例子如下:
components/UseAxios.vue
3. 新增图书信息
<button @click=“sendFn”>发布
2.4_axios基本使用-全局配置
目标: 避免前缀基地址, 暴露在逻辑页面里, 统一设置
axios.defaults.baseURL = “http://123.57.109.30:3006”
// 所有请求的url前置可以去掉, 请求时, axios会自动拼接baseURL的地址在前面
getAllFn() {
axios({
url: “/api/getbooks”,
method: “GET”, // 默认就是GET方式请求, 可以省略不写
}).then((res) => {
console.log(res);
});
// axios()-原地得到Promise对象
},
3. n e x t T i c k 和 nextTick和 nextTick和refs知识
3.0 $refs-获取DOM
目标: 利用 ref 和 $refs 可以用于获取 dom 元素
components/More.vue
1. 获取原生DOM元素
我是一个孤独可怜又能吃的h1
总结: 通过id / ref, 都可以获取原生DOM标签
3.1 $refs-获取组件对象
目标: 获取组件对象, 调用组件里方法
components/Child/Demo.vue
我是Demo组件
More.vue - 获取组件对象 - 调用组件方法
1. 获取原生DOM元素
我是一个孤独可怜又能吃的h1
2. 获取组件对象 - 可调用组件内一切
总结: ref定义值, 通过$refs.值 来获取组件对象, 就能继续调用组件内的变量
3.2 $nextTick使用
Vue更新DOM-异步的
目标: 点击count++, 马上通过"原生DOM"拿标签内容, 无法拿到新值
components/Move.vue - 继续新增第三套代码
1. 获取原生DOM元素
我是一个孤独可怜又能吃的h1
2. 获取组件对象 - 可调用组件内一切
3. vue更新DOM是异步的
{{ count }}
<button @click=“btn”>点击count+1, 马上提取p标签内容
总结: 因为DOM更新是异步的
3.3 $nextTick使用场景
目标: 点击搜索按钮, 弹出聚焦的输入框, 按钮消失
![ n e x t T i c k 使 用 ] ( i m a g e s / nextTick使用](images/ nextTick使用](images/nextTick使用.gif)
components/Tick.vue
<button v-else @click=“btn”>点击我进行搜索
3.4 组件name属性使用
目标: 可以用组件的name属性值, 来注册组件名字
问题: 组件名不是可以随便写的?
答案: 我们封装的组件-可以自己定义name属性组件名-让使用者有个统一的前缀风格
components/Com.vue
我是一个Com组件
App.vue - 注册和使用
1. 生命周期
<button @click=“show = false”>销毁组件
2. axios使用
3. $refs的使用
4. $nextTick使用场景
5. 组件对象里name属性
4.0 案例-购物车-项目初始化
目标: 初始化新项目, 清空不要的东西, 下载bootstrap库, 下载less模块
vue create shopcar
yarn add bootstrap
yarn add less less-loader@5.0.0 -D
图示:
- 按照需求, 把项目页面拆分成几个组件, 在components下创建
-
MyHeader组件
-
MyFooter组件
-
MyGoods组件 - 商品
-
MyCount组件
-
然后引入到App.vue上注册
-
在main.js中引入bootStrap库
import “bootstrap/dist/css/bootstrap.css” // 引入第三方包里的某个css文件
MyHeader.vue
MyGoods.vue
<input type=“checkbox” class=“custom-control-input” id=“input”
¥ 100
数量组件
目标: 完成商品组件右下角商品组件的开发
components/MyCount.vue
-
+
components/MyFooter.vue
合计:
¥ 0
结算 ( 0 )
4.1 案例-购物车-头部自定义
目的: 头部的标题, 颜色, 背景色可以随便修改, props类型的校验
思路
-
在MyHeader.vue中准备props里变量, 然后使用
-
在使用MyHeader.vue组件时, 传入相应的值 (color和backgroundColor)
MyHeader.vue
App.vue传入相应自定义的值
总结:
props: [] - 只能声明变量和接收, 不能类型校验
props: {} - 声明变量和校验类型规则 - 外部传入值不对则报错
4.2 案例-购物车-请求数据
目标: 使用axios把数据请求回来
数据地址: https://www.escook.cn/api/cart (get方式)
- 下载axios
yarn add axios
- main.js - 原型上挂载
// 目标: 请求数据 - 打印
// 1. 下载axios库, main.js - 全局绑定属性 (确保任意.vue文件可以都访问到这个axios方法)
import axios from ‘axios’
// 2. 基础地址
axios.defaults.baseURL = “https://www.escook.cn”
// 3. axios方法添加到Vue的原型上
Vue.prototype.$axios = axios
new Vue({
render: h => h(App),
}).$mount(‘#app’)
- App.vue请求使用
总结: 利用axios, 调用接口, 把数据请求回来
4.3 案例-购物车-数据渲染
目标: 把上面请求的数据, 铺设到页面上
App.vue
<MyGoods v-for=“obj in list”
:key=“obj.id”
:gObj=“obj”
MyGoods.vue
<input type=“checkbox” class=“custom-control-input” :id=“gObj.id”
v-model=“gObj.goods_state”
¥ {{ gObj.goods_price }}
MyCount.vue
-
+
总结: 把各个组件关联起来, 把数据都铺设到页面上
4.4 案例-购物车-商品选中
问题: 点击发现总是第一个被选中
原来id和for都是"input"
但是id是唯一的啊, 所以用数据的id来作为标签的id, 分别独立, 为了兼容label点击图片也能选中的效果
<input type=“checkbox” class=“custom-control-input” :id=“gObj.id”
v-model=“gObj.goods_state”
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
循环的所有label的for都是input, id也都是input - 默认只有第一个生效
解决: 每次对象里的id值(1, 2), 分别给id和for使用即可区分
–>
<input type=“checkbox” class=“custom-control-input” :id=“gObj.id”
v-model=“gObj.goods_state”
¥ {{ gObj.goods_price }}
MyCount.vue
-
+
总结: 把各个组件关联起来, 把数据都铺设到页面上
4.4 案例-购物车-商品选中
问题: 点击发现总是第一个被选中
原来id和for都是"input"
但是id是唯一的啊, 所以用数据的id来作为标签的id, 分别独立, 为了兼容label点击图片也能选中的效果
<input type=“checkbox” class=“custom-control-input” :id=“gObj.id”
v-model=“gObj.goods_state”
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-N8hwmRLr-1715063821514)]
[外链图片转存中…(img-LAA0Kve1-1715063821515)]
[外链图片转存中…(img-MxT7R3Sj-1715063821515)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!