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,一经查实,立即删除!

相关文章

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

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

java基础学习笔记(一)

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

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

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

java基础学习笔记(二)

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

java基础学习笔记(三)

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

名片设计尺寸及注意事项(详尽),附加:文字转曲线或外框字;网址、文字转二维码方法

附加&#xff1a; 文字如何转曲线或外框字&#xff1f;&#xff1f; "转曲"是在用Corl Draw(简称CD)或者Adobe Illustrator(简称AI)做图时对文字作的一项重要操作,因为如果不转曲的话在把文件拿到其它电脑上编辑时可能会因为缺少字体文件而不能正常显示文字!! 转曲…

AVI转MP4视频无损格式转码

前言&#xff1a;产品宣传需要无损avi转mp4转换格式 前期准备&#xff1a; 格式工厂 下载链接&#xff1a;https://pan.baidu.com/s/1WLD1ip9EaMdca_k2x7Zhvg 提取码&#xff1a;i4nx DIVX、AVC、HEVC三种压码格式的区别&#xff1a; DivX是早期的MPEG4视频压缩编码&…

vue-cli搭建和“Cannot find module npm-cli.js” 、“operation not permitted” 、 deprecated coffee-script等错误

前言&#xff1a;重装nodejs后&#xff0c; vue-cli搭建项目后运行vue项目报错报错 "npm Error: Cannot find module npm-cli.js" &#xff0c;同时发现npm -v 也报错。 分析: vue-cli脚手架模板是基于node下的npm来完成安装的&#xff0c;安装vue-cli也会先安装no…

websocket 学习--简单使用,nodejs搭建websocket服务器,到模拟股票,到实现聊天室

websocket简介&#xff1a; WebSocket协议是 HTML5 开始提供的一种基于TCP的一种新的全双工通讯的网络通讯协议。它允许服务器主动发送信息给客户端。 和http协议的不同&#xff1f;&#xff1f; HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型…

红队打靶练习:DIGITALWORLD.LOCAL: FALL

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 6、小结 目录探测 1、gobuster 2、dirsearch WEB 80端口 /test.php 文件包含漏洞 SSH登录 提权 get root and flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interfa…

vue全局安装jquery,vue使用bootstrap框架,vue中封装websocket通讯,vue引入element-ui 组件库,引入highcharts图表插件

vue安装jquery&#xff1a; 1、使用vue-cli创建好vue项目后&#xff0c;在项目文件夹下&#xff0c;使用命令npm install jquery --save-dev 引入jquery。 2、修改项目文件 build/webpack.base.conf.js&#xff0c;添加如下内容&#xff1a; var webpackrequire(webpack) mo…

flex弹性布局笔记

学习自菜鸟教程的flex布局笔记 布局的传统解决方案&#xff0c;基于盒装模型&#xff0c;依赖 display 属性 position 属性 float 属性。它对于那些特殊布局非常不方便&#xff0c;比如&#xff0c;垂直居中就不容易实现。 简介&#xff1a; W3C提出了一种新的方案—-Flex布…

css宽高自适应布局,实现Sticky Footer的三种布局方式

宽度自适应布局&#xff1a; 1、使用场景&#xff1a; 一侧&#xff08;左侧或者右侧&#xff09;为固定的导航或者菜单栏&#xff0c;另一侧将会随着浏览器的缩放而自适应改变其大小。这种布局结构可用于顶层布局结构亦可用于某个局部功能块&#xff0c;常见于各种web系统&am…

vue学习:事件传递(冒泡和捕获),事件委托,jquery中的事件委托,$event 获取元素,vue事件修饰符

事件传递 ----冒泡和捕获 DOM事件标准定义了两种事件流&#xff0c;这两种事件流分别是捕获和冒泡。 和许多Web技 术一样&#xff0c;在它们成为标准之前&#xff0c;Netscape和微软各自不同地实现了它们。Netscape选择实现了捕获事件流&#xff0c;微软则实现了冒泡事件流。…

vue中路径的配置使用

绝对路径使用&#xff1a; 在项目中build文件夹下的webpack.base.conf.js的 使用如下&#xff1a; import mock from /mock/mock.js; html 相对路径使用 1. 当需要引用 同一目录下的文件&#xff0c;直接输入文档, 如下 <img src”bg.jpg” /> 2、当需要引用下一级目录…

常用MIME类型,解决IIS布署后字体文件、mp4视频文件等not found 的错误

前言&#xff1a;项目在本地运行正常&#xff0c;但部署在IIS服务器后使用浏览器访问项目会报&#xff1a;404 not found 错误&#xff0c;包括mp4视频文件和woff文件找不到。。如下 原因&#xff1a;在IIS中没有将 .mp4和 .woff 后缀的相应的MIME类型&#xff0c;使得 .mp4等格…

浏览器兼容video视频播放的多种方法

前言&#xff1a; 在 HTML 中播放视频并不容易&#xff01;因为直到现在&#xff0c;仍然不存在一项旨在网页上显示视频的标准。今天&#xff0c;大多数视频是通过插件&#xff08;比如 Flash&#xff09;来显示的。然而&#xff0c;并非所有浏览器都拥有同样的插件。 比如win…

pdf文件加密解密,pdf忘记密码解密的办法

1、pdf文件加密 步骤&#xff1a;wps》菜单“保护”》文档加密&#xff0c;设置编辑及页面密码&#xff0c;如下 2、pdf解密 在解密窗口取消选择“设置编辑及页面密码”&#xff0c;如下 注意&#xff1a;当忘记pdf密码时&#xff0c;可以使用pdf解密软件解密&#xff0c;如下…

伪类::selection自定义文本选中时的样式(CSS3样式),CSS3的word-break单次换行

1、::selection CSS3伪类自定义文本选中时的样式 有的人在浏览网页时&#xff0c;喜欢一边选中文本一边阅读。在windows环境下&#xff0c;正常的文本选中应该是深蓝色背景白色文本的样式。那么想要修改文本选中样式&#xff0c;可以通过css中有这样的一个伪类::selection用于自…

修改elementUI组件样式无效的多种解决方式

前言&#xff1a;vueelementUI项目开发中&#xff0c;经常遇到修改elementUI组件样式无效的问题&#xff0c; 原因&#xff1a;在vue组件中我们经常需要给style添加scoped来使得当前样式只作用于当前组件的节点。添加scoped之后&#xff0c;工作原理是将当前组件的节点添加一个…