**从创建 **到 销毁 的整个过程就是 – Vue实例的 - 生命周期
Vue 框架内置函数,随着组件的生命周期阶段,自动执行
阶段 | 方法名 | 方法名 |
---|---|---|
初始化 | beforeCreate | created |
挂载 | beforeMount | mounted |
更新 | beforeUpdate | updated |
销毁 | beforeDestroy | destroyed |
初始化阶段2个钩子函数作用和执行时机
components/Life.vue - 创建一个文件
App.vue - 引入使用
<template>
<div>
<h1>1. 生命周期</h1>
<Life></Life>
</div>
</template>
<script>
import Life from './components/Life'
export default {
components: {
Life
}
}
</script>
挂载阶段2个钩子函数作用和执行时机 不能获取真实DOM
1.template选项检查
有 - 编译template返回render渲染函数
无 – 编译el选项对应标签作为template(要渲染的模板)
2.虚拟DOM挂载成真实DOM之前
3.beforeMount – 生命周期钩子函数被执行
4.Create … – 把虚拟DOM和渲染的数据一并挂到真实DOM上
5.真实DOM挂载完毕
6.mounted – 生命周期钩子函数被执行
学习生命周期 - 看控制台打印
{{ msg }}
更新阶段2个钩子函数作用和执行时机 获取更新后的DOM在updated钩子函数
1.当data里数据改变, 更新DOM之前
2.beforeUpdate – 生命周期钩子函数被执行
3.Virtual DOM…… – 虚拟DOM重新渲染, 打补丁到真实DOM
4.updated – 生命周期钩子函数被执行
5.当有data数据改变 – 重复这个循环
准备ul+li循环, 按钮添加元素, 触发data改变->导致更新周期开始
学习生命周期 - 看控制台打印
{{ msg }}
-
{{ val }}
当数据发生变化并更新页面后执行updated钩子函数
销毁阶段2个钩子函数作用和执行时机 手动消除计时器/定时器/全局事件在beforeDestroy/destroyed
components/Life.vue - 准备生命周期方法(Life组件即将要被删除)
<script>
export default {
// ...省略其他代码
// 四. 销毁
// 前提: v-if="false" 销毁Vue实例
// 场景: 移除全局事件, 移除当前组件, 计时器, 定时器, eventBus移除事件$off方法
beforeDestroy(){
// console.log('beforeDestroy -- 执行');
clearInterval(this.timer)
},
destroyed(){
// console.log("destroyed -- 执行");
}
}
</script>
App.vue - 点击按钮让Life组件从DOM上移除 -> 导致Life组件进入销毁阶段
特点
axios({
method: '请求方式', // get post
url: '请求地址',
data: { // 拼接到请求体的参数, post请求的参数
xxx: xxx,
},
params: { // 拼接到请求行的参数, get请求的参数
xxx: xxx
}
}).then(res => {
console.log(res.data) // 后台返回的结果
}).catch(err => {
console.log(err) // 后台报错返回
})
功能
接口
引入
1. 获取所有图书信息
调用接口获取信息
<template>
<div>
<p>2. 查询某本书籍信息</p>
<input type="text" placeholder="请输入要查询 的书名" v-model="bName" />
<button @click="findFn">查询</button>
</div>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
bName: ""
};
},
methods: {
// ...省略了查询所有的代码
findFn() {
axios({
url: "/api/getbooks",
method: "GET",
params: { // 都会axios最终拼接到url?后面
bookname: this.bName
}
}).then(res => {
console.log(res);
})
}
},
};
</script>
3. 新增图书信息
配置基础地址, 统一管理
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对象
},
利用 ref 和 $refs 可以用于获取 dom 元素
1. 获取原生DOM元素
我是一个孤独可怜又能吃的h1
复制代码
ref定义值, 通过$refs.值 来获取组件对象, 就能继续调用组件内的变量
1. 获取原生DOM元素
我是一个孤独可怜又能吃的h1
2. 获取组件对象 - 可调用组件内一切
Vue更新DOM-异步的
点击count++, 马上通过"原生DOM"拿标签内容, 无法拿到新值
1. 获取原生DOM元素
我是一个孤独可怜又能吃的h1
2. 获取组件对象 - 可调用组件内一切
3. vue更新DOM是异步的
{{ count }}
点击搜索按钮, 弹出聚焦的输入框, 按钮消失
可以用组件的name属性值, 来注册组件名字
components/Com.vue
我是一个Com组件
App.vue - 注册和使用
1. 生命周期
2. axios使用
3. $refs的使用
4. $nextTick使用场景
5. 组件对象里name属性