vue生命周期详解、钩子函数的调用(简单易懂)

定义:vue的生命周期是指vue实例从初始化创建到实例销毁的过程。期间会有8个钩子函数的调用。

 

vue的钩子函数图解:


 

vue的钩子函数使用总结:

1、beforeCreate(创建前):beforeCreate钩子函数,这个时候,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。无法访问到数据和真实的dom和data中的数据,可以在这里面使用loading

2、created(创建后):created函数中可以对data对象里面的数据进行使用和更改,不会触发其他的钩子函数,一般可以在这里做初始数据的获取也可以结束loading; 这里进行dom操作需要使用vue.nextTick()方法

3、beforeMount(挂载前):beforeMount钩子函数,vue实例的$el和data都初始化了,但还是虚拟的dom节点,具体的data.filter还未替换。在这里也可以更改数据,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

4、mounted(挂载后):mounted钩子函数,此时,组件已经出现在页面中数据、真实dom都已经处理好了,事件都已经挂载好了,data.filter成功渲染可以在这里操作真实dom等事情...

5、beforeUpdate (更新前):当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿

6、updated(更新后):当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom

7、beforeDestroy(销毁前):当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等

8、destroyed(销毁后):vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在。这个时候,执行destroyed,在这里做善后工作也可以

 

vue的钩子函数代码验证:

console打印效果:

demo验证代码:

<template><div><h3>{{testMsg}}</h3><p style="color:red;" id="testNum">{{testNum}}</p><div><button @click="changNum()">点击修改num的数值大小</button></div><p style="color:red;">过滤器处理后的值:{{testNum | add(10,20)}}</p><div><button @click="destroyVue()">销毁</button></div></div>
</template><script>
export default {name: 'HelloWorld',// data是数据对象data () {   return {testMsg:"原始值",num:2,}},//computed对象包括需要计算的属性,属性值依赖于别的数据computed:{testNum:function(){let that =this;return that.num * 3;},},//检测某一属性值的变化,属性值的变化会造成其他dom变化watch:{testNum:function(val){if(val>9){console.log("testNum的值变得大于9了!");}}},//组件内部的方法methods:{changNum:function(){let that =this;that.num=5;},destroyVue:function(){this.$destroy();}},//过滤器对象,filter的第一个参数默认是当前的item值filters:{add:function(val,num1,num2){return val+num1+num2;},},//vue实例创建前beforeCreate:function(){console.group('beforeCreate 创建前状态===============》'); //console的分组打印console.log("%c%s", "color:red","el     : " + this.$el); //输出undefinedconsole.log("%c%s", "color:red","data   : " + this.$data); //输出undefinedconsole.log("%c%s", "color:red","testMsg: " + this.testMsg);//输出undefinedconsole.log("%c%s", "color:red","testNum: " + this.testNum);//输出undefinedconsole.groupEnd(); },//vue实例创建完成,可以进行data对象中数据操作,一般获取初始化数据created:function(){console.group('created 创建完成状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //输出undefinedconsole.log("%c%s", "color:red","data   : " + this.$data); //输出[Object Object] ,初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//输出:"原始值",初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//输出:6,可以computed计算console.groupEnd(); },//vue实例挂载前,不能获取$el元素,生成的虚拟dombeforeMount:function(){console.group('beforeMount 挂载前状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //undefinedconsole.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //无输出,dom未生成console.groupEnd(); },//mounted:function(){console.group('mounted 挂载完成的状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //输出[object HTMLDivElement],初始化成功console.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //输出6,初始化成功console.groupEnd(); },//更改data对象中数据后,页面渲染新数据前的状态beforeUpdate:function(){console.group('beforeUpdate 更新前的状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //初始化成功console.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //初始化成功console.groupEnd(); },//数据更改后并重新渲染后,dom也重新更新了updated:function(){console.group('updated 更新完成的状态==========');console.log("%c%s", "color:red","el     : " + this.$el); //初始化成功console.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //初始化成功console.groupEnd(); },//销毁前beforeDestroy:function(){console.group('beforeDestroy 销毁前的状态');console.log("%c%s", "color:red","el     : " + this.$el); console.log("%c%s", "color:red","data   : " + this.$data); console.log("%c%s", "color:red","testMsg: " + this.testMsg);console.log("%c%s", "color:red","testNum: " + this.testNum);console.log($("#testNum").text());  console.groupEnd(); },//销毁后修改data数据无效,生成的dom依旧存在destroyed(){console.group('destroyed 销毁完成的状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); console.log("%c%s", "color:red","data   : " + this.$data); console.log("%c%s", "color:red","testMsg: " + this.testMsg);console.log("%c%s", "color:red","testNum: " + this.testNum);console.log($("#testNum").text());  console.groupEnd(); },}
</script>

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QQ浏览器如何查看网站保存的密码

小编日常使用的浏览器大多是QQ浏览器&#xff0c;基于腾讯QQ下的账号同步功能给我带来了许多方便&#xff0c;其中QQ浏览器的账号密码自动保存&#xff0c;同时通过云同步可以在各个终端同步账号密码&#xff0c;所以使用QQ浏览器对常用网络浏览时可以一键免密登录&#xff0c;…

vue-router详尽:编程式导航、路由重定向、动态路由匹配、路由别名、嵌套路由、命名视图

vue-router编程式导航 在vue项目中经常用到this.$router.push() 和 this.$router.replace() 方法进行路由跳转就是编程式导航。。。 通俗理解编程式导航&#xff1a;通过操作$router实例的JavaScript代码实现路由跳转。点击 <router-link :to"..."> 等同于调用…

win10 edge默认浏览器设置更改教程

win10 edge默认浏览器设置更改教程 win10 edge默认浏览器怎么设置?在Win10中&#xff0c;默认浏览器修改已经不再像以前Win7/Win8.1那样容易&#xff0c;已经不能直接通过第三方浏览器设置直接修改&#xff0c;要用到新的“招数”&#xff0c;用户需在“设置”中手动修改。如…

ie浏览器ip代理怎么设置

核心提示&#xff1a;经常上网的朋友经常会遇到想使用代理IP上网的情况&#xff0c;但是又苦恼不知道怎么设置&#xff0c;小编这就告诉大家怎么在IE浏览器上设置代理IP上网。 ie浏览器ip代理怎么设置&#xff1f;经常上网的朋友经常会遇到想使用代理IP上网的情况&#xff0c;…

理解JavaScript中this的指向详解

this的定义和理解&#xff1a; this是JavaScript语言的一个关键字&#xff0c;它是函数运行时&#xff0c;在函数体内部自动生成的一个对象&#xff0c;只能在函数体内使用。 1、this和执行环境对象有关&#xff0c;和函数的声明无关。 var name"Tom";var Bob{name:…

如何设置PP视频允许PPAP驻留

今天继续给大家分享PP视频方面的内容。   如何设置PP视频允许PPAP驻留&#xff0c;将让下次启动时更加快速&#xff0c;下面让我们一起看看&#xff0c;是如何设置的吧 1、点击“PP视频” 2、在“PP视频”播放窗口中&#xff0c;点击“菜单”按钮 3、在弹出下拉栏中&#…

深入理解call、apply、bind(改变函数中的this指向)

在JavaScript中call、apply、bind是Function 对象自带的三个方法&#xff0c;这三个方法的主要作用是改变函数中的 this 指向&#xff0c;从而可以达到接花移木的效果。本文将对这三个方法进行详细的讲解&#xff0c;并列出几个经典应用场景。 区分&#xff1a; 1、call(objec…

360浏览器设置多标签操作步骤

360浏览器设置多标签操作步骤 360浏览器怎么设置多标签?昨天小编写了一篇如何使用ie7浏览器设置多个主页的文章&#xff0c;就有小伙伴留言给小编360浏览器能否实现这项功能?当然有!下面小编就介绍操作方法&#xff1a; 1、打开360浏览器&#xff0c;在左上角找到“工具”点…

形参和实参是什么?? shim和polyfil是什么意思??

形参和实参是什么&#xff1f;&#xff1f; 实参(argument)&#xff1a; 全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等&#xff0c; 无论实参是何种类型的量&#xff0c;在进行函数调用时&#xff0c;它们都必须具有确定的值…

占内存最小的浏览器:360安全浏览器超速版推荐

占内存最小的浏览器&#xff1a;360安全浏览器超速版推荐 占内存最小的浏览器有哪些?今天小编为大家推荐的是360安全浏览器超速版。本站提供360安全浏览器超速版最新正式版及抢票专版下载。那360安全浏览器超速版怎么样?看看小编整理的资料就清楚了。 360安全浏览器超速版资…

PS人像修图,通道磨皮、高低频磨皮、滤镜磨皮、人像精修

1、快速简单美肤-----高斯模糊磨皮&#xff1a; 原理 是高斯模糊蒙版。这种磨皮方法主要是针对面部的斑点及细纹。 操作流程概括&#xff1a;复制背景图层 》【滤镜】|【模糊】|【高斯模糊】命令 》 按‘Alt’键添加图层蒙版 》 在蒙版上使用画笔涂抹出想要模糊的地方》曲线…

java基础学习笔记(一)

java开发环境搭建&#xff1a;JDK配置 java 集成开发环境IDE&#xff08;Integrated Development Environment&#xff09; 》Eclipse工具 1、官网下载后安装elipse&#xff0c;注意&#xff1a;Eclipse 安装时JDK位数和Eclpise位数必须保持一致&#xff0c;安装过程中Switch…

谷歌浏览器怎么拦截网页广告 5步解决广告困扰

众所周知&#xff0c;广告是许多门户网站的主要收入来源之一&#xff0c;但广告内容的真实性辨识难度极高&#xff0c;一时大意便会中招。值得庆幸的是&#xff0c;许多浏览器产品都内置了广告拦截功能!下面小编就以谷歌浏览器为例&#xff0c;简单介绍一下广告拦截功能的开启方…

常用矢量图有哪些格式?AI文件存储为psd分层

前言 下载的矢量图资源会发现有ai格式、cdr格式的、eps格式、icon格式&#xff0c;有的能使用Photoshop打开而有的不行。使用Photoshop保存矢量图时候选择什么格式保存都是经常遇到的问题。 常见问题及解决&#xff1a;PS打开ai格式的矢量图文件&#xff0c;你用PS打开发现只…

来自天堂的连枷

来自天堂的连枷主要内容 《来自天堂的连枷》讲述的是&#xff1a;一个农夫将角长得越来越大的两头牛卖给屠户&#xff0c;他们商定的支付方式是&#xff0c;农夫给屠夫一配克油菜籽&#xff0c;然后由屠夫点数&#xff0c;一粒油菜籽付一块金币。途中农夫掉了一粒油菜籽&#…

百度地图API实现地图应用

企业官网上需要用到地图应用&#xff0c;这里对百度地图API的使用做点笔记&#xff0c;好记性不如烂笔头。 实现地图应用的流程如下&#xff1a; 1、获取密钥&#xff1b;教程网址 https://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html 2、在html的head头部引入…

win10开机密码忘记了的解锁教程

如今Win10系统逐渐成为了主流桌面系统&#xff0c;很多时候我们为了安全起见&#xff0c;往往会给自己的电脑系统设置一个开机密码&#xff0c;这样别人就不会轻易使用自己的电脑。但有时候难免会忘记开机密码。那么遇到Win10开机密码忘了怎么办呢?今天小编就给大家说说win10开…

java基础学习笔记(二)

1、数组排序之选择法排序和冒泡排序&#xff1f; 选择法排序原理&#xff1a;数组第一位和后续位置数值比较&#xff0c;最大或最小的调换位置后放在第一位&#xff1b;依次比较将第二大或小的值调换位置后放在第二位置&#xff1b;代码如下&#xff1a; for (int j 0; j <…

OneNote怎样显示或者隐藏网格线

网格线可添加到图表中以易于查看和计算数据的线条&#xff0c;能够辅助我们来对其图像或者是文本&#xff0c;很多新手用户在使用OneNote的时候不知道要怎样设置&#xff0c;下面小编就分享一下OneNote显示或者隐藏网格线的方法&#xff0c;还不知道的一起来学习一下OneNote显示…

java基础学习笔记(三)

1、装箱和拆箱 所有基本类型都有对应的类类型&#xff0c;比如int对应的类是Integer,这种类就叫做封装类。数字封装类有Byte、Short、Integer、Long、Float、Double这些类都是抽象类Number的子类。封装类和基本类型之间可以相互转换&#xff0c;而基本类型自动转封装类型就叫装…