生命周期


1- 概念

组件/Vue在创建到销毁会经历一系列特殊的过程,称为生命周期。

在过程中执行的回调函数 称为生命周期钩子函数。

2- 作用

可以让我们 在恰当时期,做一些自动操作

  • 网络请求数据
  • ​监听dom事件
  • 执行定时器
  • 清除定时器
  • 解除监听

3- 生命周期钩子函数

  • 创建前后

beforeCreate

  • 特点:有this,没有data,没有$el

created

  • 特点:有data ,没有 $el
  • 作用:axios 请求、本地数据读取、window事件监听、定时器开启
  • 挂载前后

beforeMount

  • 特点:有$el,没有渲染

mounted

  • 特点:页面有渲染
  • 作用:可以和created重复,可以操作DOM
  • 更新前后

beforeUpdate

  • 特点:数据已经更新,没有渲染

updated

  • 特点:数据更新,dom已经更新渲染
  • 销毁前后

beforeDestroy

  • 特点:有this,能方法实例的data等
  • 作用:移除事件监听,清除定时器

destroyed

  • 特点:切断组件与dom的联系

4- 生命周期图

5- 案例

  • 生命周期
<!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" /><title>Document</title><script src="../js/vue.js"></script></head><body><div id="app"><h1>生命周期</h1><p>8个:创建前后,挂载前后,更新前后,销毁前后</p><p>常用3个 创建完毕,挂载完毕,销毁前</p><p>create创建 mount挂载 update更新 destroy销毁</p><p>{{msg}}</p><button @click="num ++" id="num">{{num}}</button><button @click="$destroy()">销毁</button></div><script>new Vue({el: "#app",data() {return {msg: "你好生命周期",num: 5,};},//创建前 有this  没有把data 数据 挂载到实例this上beforeCreate() {// console.log("before 创建前", this, this.msg);},//创建完毕  已经有this ,有数据//这个阶段,可以:执行ajax,读取本地数据,开启定时器,注册事件window相关事件created() {// console.log("*创建完毕", this, this.msg);// console.log("created 创建完毕", this.$el);},//挂载前:生成了dom没有编译(挂载)beforeMount() {// console.log("beforeMount 挂载前", this.$el);// console.log(//     "beforeMount 挂在前",//     document.querySelector("#app".innerHTML)// );},//挂载完毕,dom已经被挂载到真实的节点,已经完成编译工作// 作用:执行ajax,读取本地数据,开启定时器,注册事件,操作dom节点mounted() {// console.log(//     "*mounted 挂载完毕",//     document.querySelector("#app").innerHTML// );},//beforeUpdate 更新前 ,数据更新了,dom没有更新beforeUpdate() {//只要数据发生变化都会执行更新(多次执行)// console.log(//     "beforeUpdate 更新前",//     this.num,//     document.getElementById("num").innerHTML// );},// updated 更新完毕,数据更新dom 也更新完毕updated() {// console.log(//     "Updated 更新完毕",//     this.num,//     document.getElementById("num").innerHTML// );},//销毁前 能 访问到this,也能操作到data 的数据//移除定时器,移除事件监听beforeDestroy() {this.num++;console.log("*beforeDestoy 销毁前", this.num);},//销毁完毕,切断实例与dom 的联系,无法再使用子组件的实例,methods.watchdestroyed(){console.log("destroyed销毁完毕",this.num);}});</script></body>
</html>
  • created 应用
<!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" /><title>Document</title><script src="../js/vue.js"></script></head><body><div id="app"><h1>生命周期--created</h1><!-- 渲染list 数据 --><div class="list"><div class="item" v-for="(item,index) in list" :key="index">{{item.summary}}<hr /></div></div></div><script>new Vue({el: "#app",data() {return {//笑话列表list: [],page: 1, //当前请求的页数flag: true, //是否允许请求,请求中 ,不允许下一个请求};},beforeDestroy() {//页面销毁前,移除事件监听window.removeEventListener("scroll", this.check);},created() {this.getJok();window.addEventListener("scroll", this.check);},methods: {check() {var elem = document.querySelector(".list .item:last-of-type");var top = elem.getBoundingClientRect().top;var winH = window.innerHeight;if (top <= winH && this.flag) {this.getJok();}},//fetch 和axios,都是用来ajax请求的工具/*fetch 是js 原生 请求工具,需要 .then两次才能拿到数据第一次 .then 是把流数据转换为json或者字符串第二次 .then 才是真正的获取数据.catch 请求失败执行的回调函数*/getJok() {this.flag = false;fetch("http://dida100.com/mi/list.php?page=" + this.page).then((res) => res.json()).then((res) => {console.log(res);//concat连接合并两个数组// 把原来的list 与新请求数据的result 合并,再次赋值给thisthis.flag = true;this.list = this.list.concat(res.result);// 让请求的页数自动加1this.page++;/* 数据更新,等待dom更新再执行checkthis.$nextTick数据更新,等待dom 更新执行回到函数,实现执行this.check*/this.$nextTick(() => {this.check();});}).catch((err) => {this.flag = true;console.log(err);});},},beforeDestroy() {},});</script></body>
</html>

  • mounted 应用
<!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" /><title>Document</title><script src="../js/vue.js"></script></head><body><div id="app"><h1>生命周期--mounted</h1><p>ref引用,在vue实例中key通过$refs 获取dom 的 像html 的id</p><p>子组件也可以通过ref 来引用</p><!-- 渲染list 数据 --><div class="list"><div class="item" v-for="item in len" :key="item">{{item}}<hr /></div><input type="text" ref="inp" /><button @click="getIt()">获取</button></div></div><script>new Vue({el: "#app",data() {return {len: 20,};},methods: {getIt() {//获取所有dom引用的集合alert(this.$refs.inp.value);console.log(this.$refs.myp);},},//在mounte 生命周期钩子函数中能够获取到渲染后的节点mounted() {console.log(document.querySelectorAll(".item"));},});</script></body>
</html>


这篇分享就到这里了

【Vue】Vue2生命周期详解相关推荐

  1. 【vue系列-05】vue的生命周期(详解)

    深入理解vue的生命周期 一,vue的生命周期 1,创建流程 1.1,beforeCreate 1.2,created 2,挂载流程 2.1,beforeMount 2.2,mounted 3,更新流 ...

  2. Vue的生命周期详解

    Vue的生命周期 Vue的生命周期就是vue实例从创建到销毁的全过程,也就是 new Vue() 开始就是vue生命周期的开始.Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板. ...

  3. Vue的生命周期详解,一文带你弄懂Vue的生命周期

    大家好,我是Ned

  4. vue 声明周期函数_Vue 生命周期详解

    Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...

  5. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  6. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  7. Fragment的懒加载与生命周期详解

    提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...

  8. 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记

    01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...

  9. taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...

最新文章

  1. 五:Angular 数据绑定 (Data Binding)
  2. mysql setup choose_1.MySQL安装、启动、登录、重置密码、卸载
  3. mysql中的存储过程和函数
  4. 中国研究的超级系统计算机,[公告]超级系统恢复--学习电脑 Book 3 V1.1
  5. 【学术相关】选导师犹如选对象:真真切切,现现实实!
  6. 简单暴力到dp的优化(萌新篇)
  7. hive数据倾斜及处理案例
  8. 95后大学生利用漏洞免费吃肯德基获刑;Linux内核初步支持苹果M1;Android Studio 4.2 发布|极客头条...
  9. 疯狂Java实战演义
  10. eclipse 安装 阿里代码规范检测插件
  11. 信息系统服务器维护,信息系统运行维护服务方案(IT运维服务方案)-20210729025444.pdf-原创力文档...
  12. 免费UNITY资源的超级列表
  13. 咸鱼K210体验笔记—颜色识别
  14. 如何采用一套程序代码,实现系统的“千人千面”
  15. 计算机毕业设计(38)java毕设作品之餐厅座位预订系统
  16. 菩提本无树,明镜亦非台,本来无一物,何处惹尘埃(学习)
  17. int和字符串的类型转换
  18. PTA(二十五) 算法设计与分析 第七章 贪心法 7-1 装箱问题 (20 point(s))
  19. 金融时报:去赚8亿非网民的钱
  20. 基因数据处理51之cs-bwamem集群版运行*

热门文章

  1. vol.173 乱炖 · 公司基因论靠不靠谱?
  2. 比情商更能拉开人生差距的,是“闭环思维”
  3. odoo openerp 分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表
  4. 以小25倍参数量媲美GPT-3的检索增强自回归语言模型:RETRO
  5. python 爬虫 小姐姐
  6. 自学C++编程,掌握这三项技能就可以工作了
  7. 2022年危险化学品经营单位安全管理人员特种作业证考试题库及模拟考试
  8. springboot丽江市旅游服务网站的设计与实现.rar(论文+项目源码)
  9. 2021-2027全球及中国401(k)软件行业研究及十四五规划分析报告
  10. Pygame实战:升级后的2048小游戏—解锁新花样,根本停不下来【附源码】