第14集丨Vue2 基础 —— 生命周期

news2025/1/21 1:00:20

目录

  • 一、引子
    • 1.1 实现一
    • 1.2 一个死循环的写法
    • 1.3 mounted实现
  • 二、生命周期
    • 2.1 概念
    • 2.2 常用的生命周期钩子
    • 2.3 关于销毁Vue实例注意点
    • 2.4 vm的一生(vm的生命周期)
    • 2.5 生命周期图示

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。比如 created 钩子可以用来在一个实例被创建之后执行代码。也有一些其它的钩子,在实例生命周期的不同阶段被调用,如 mountedupdateddestroyed。生命周期钩子的 this 上下文指向调用它的 Vue 实例。

一、引子

需求:实现我爱南京透明度(opacity)由10循环渐变。

1.1 实现一

<div id="root">
    <h2 :style="{opacity}">我爱南京</h2>
</div>
<script>
    const vm = new Vue({
        el:'#root',
        data:{
            opacity:1
        }
    })
    setInterval(() => {
        vm.opacity -= 0.01;
        if(vm.opacity<=0) vm.opacity=1;
    }, 20);
</script>

1.2 一个死循环的写法

下面案例中,定时器里面做了一件事就是:修改了opacity。但是,由于Vue一旦发现opacity被修改了,就会从新解析模板,从而change()方法又会被重新调用,就导致了死循环。

<div id="root">
    <h2 :style="{opacity}">我爱南京</h2>
    {{change()}}
</div>
<script>
    const vm = new Vue({
        el:'#root',
        data:{
            opacity:1
        },
        methods: {
            change(){
                console.log("开了个定时器");
                setInterval(() => {
                    this.opacity -= 0.01;
                    if(this.opacity<=0) this.opacity=1;
                },20);
            }
        },
    })
</script>

1.3 mounted实现

mounted:什么时候被调用?Vue完成模板的解析,并把初始的真实的DOM元素放入页面(挂载完毕)后调用。只调用一次。里面的this就是vm实例对象。

下面案例中,只会打印一次:mounted挂载成功!

<div id="root">
    <h2 :style="{opacity}">我爱南京</h2>
</div>
<script>
    const vm = new Vue({
        el:'#root',
        data:{
            opacity:1
        },
        mounted() {
            console.log("mounted挂载成功!");
            setInterval(() => {
                this.opacity -= 0.01;
                if(this.opacity<=0) this.opacity=1;
            },20);
        }
    })
 
</script>

二、生命周期

2.1 概念

  1. 又名:生命周期回调函数生命周期函数生命周期钩子
  2. 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数
  3. 生命周期函数名字不可更改,但函数的具体内容是程序员根据需求编写的。
  4. 生命周期函数中的this指向是vm组件实例对象

2.2 常用的生命周期钩子

  1. mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
  2. beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

2.3 关于销毁Vue实例注意点

  1. 销毁后借助Vue开发者工具看不到任何信息。
  2. 销毁后自定义事件会失效,原生DOM事件依然有效。
  3. 一般不会在beforeDestroy中操作数据,因为即便操作数据,也不会再触发更新流程了。

2.4 vm的一生(vm的生命周期)

  • 将要创建===>调用beforeCreate()函数。
  • 创建完毕===>调用created()函数。
  • 将要挂载===>调用beforeMount()函数。
  • 挂载完毕(重要的钩子)===>调用mounted()函数。
  • 将要更新===>调用beforeUpdate()函数。
  • 新完毕===>调用updated()函数
  • 将要销毁(重要的钩子===>调用beforeDestroy()函数。
  • 销毁完毕===>调用destroyed()函数。

2.5 生命周期图示

下图展示了vm实例的生命周期,涉及到8个(4组)函数:

  • beforeCreate():无法通过vm访问到data中的数据、methods中的方法。
  • created():可以访问到data中的数据、methods中的配置方法。
  • beforeMount():页面呈现的是未经编译的DOM结构。所有对DOM的操作,最终都不奏效。
  • mounted():页面中呈现的是经过Vue编译的DOM;对DOM的操作均有效(尽可能避免)。至此,初始化过程结束,一般在此进行开启定时器、发送网络请求、订阅消息、绑定自定义事件、等初始化操作。
  • beforeUpdate():此时数据是新的,但页面是旧的,即,页面尚未和数据保持同步。
  • updated():此时数据是新的,页面也是新的,即,页面和数据保持同步。
  • beforeDestroy():此时vm中所有的datamethods、指令等等,都处于可用状态,马上要执行销毁过程。一般在此阶段:关闭定时器、取消订阅消息、解绑自定义事件等收尾操作。
  • destroyed()

在这里插入图片描述

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

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

相关文章

轻量级自动化测试框架WebZ

一、什么是WebZ WebZ是我用Python写的“关键字驱动”的自动化测试框架&#xff0c;基于WebDriver。 设计该框架的初衷是&#xff1a;用自动化测试让测试人员从一些简单却重复的测试中解放出来。之所以用“关键字驱动”模式是因为我觉得这样能让测试人员&#xff08;测试执行人员…

企业权限管理(十三)-用户关联角色操作

用户关联角色操作 从前台发送请求 <a href"${pageContext.request.contextPath}/user/findUserByIdAndAllRole.do?id${user.id}" class"btn bg-olive btn-xs">添加角色</a>查询用户以及用户可以添加的角色 usercontroller //查询用户以及用…

k8s 自身原理之 Service

好不容易&#xff0c;终于来到 k8s 自身的原理之 关于 Service 的一部分了 前面我们用 2 个简图展示了 pod 之间和 pod 与 node 之间是如何通信息的&#xff0c;且通信的数据包是不会经过 NAT 网络地址转换的 那么 Service 又是如何实现呢&#xff1f; Service 我们知道是用…

网神 SecGate 3600 防火墙任意文件上传漏洞复现

0x01 产品简介 网神SecGate3600下一代极速防火墙&#xff08;NSG系列&#xff09;是基于完全自主研发、经受市场检验的成熟稳定网神第三代SecOS操作系统 并且在专业防火墙、VPN、IPS的多年产品经验积累基础上精心研发的高性能下一代防火墙 专门为运营商、政府、军队、教育、大型…

图扑数字孪生智慧乡村综合管控平台

数字乡村是伴随网络化、信息化和数字化在农业农村经济社会发展中的应用&#xff0c;既是乡村振兴的战略方向&#xff0c;也是建设数字中国的重要内容。为了进一步提升乡村治理智能化、专业化水平&#xff0c;解决建设顶层缺失、数据孤岛等问题&#xff0c;数字孪生技术被广泛应…

工控机防病毒

2月3日&#xff0c;作为全球最大的半导体制造设备和服务供应商&#xff0c;美国应用材料公司&#xff08;Applied Materials&#xff09;表示&#xff0c;有一家上游供应商遭到勒索软件攻击&#xff0c;由此产生的关联影响预计将给下季度造成2.5亿美元&#xff08;约合人民币17…

使用MAT分析OOM问题

OOM和内存泄漏在我们的工作中&#xff0c;算是相对比较容易出现的问题&#xff0c;一旦出现了这个问题&#xff0c;我们就需要对堆进行分析。 一般情况下&#xff0c;我们生产应用都会设置这样的JVM参数&#xff0c;以便在出现OOM时&#xff0c;可以dump出堆内存文件&#xff…

JavaScript进阶 第二天

深入对象内置构造函数 一. 深入对象 创建对象三种方式构造函数实例成员&静态成员 1.1 创建对象三种方式 ① 利用对象字面量创建对象 const o {name: 哈哈 } ② 利用new Object 创建对象 const o new Object({ name: 哈哈 }) ③ 构造函数创建对象 1.2 构造函数 …

致远OA M1Server RCE漏洞复现

0x01 产品简介 致远M1移动协同软件&#xff0c;结合移动应用特色的信息终端&#xff0c;帮您高效管理&#xff0c;掌控全局&#xff1b;基于移动互联技术的产品&#xff0c;实现全天候在线&#xff0c;随时随地了解企业信息&#xff1b;触控式操作&#xff0c;舒适的滑动体验&a…

Prim+Kruskal(最小生成树)

Prim算法求最小生成树 给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环&#xff0c;边权可能为负数。 求最小生成树的树边权重之和&#xff0c;如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G(V,E)&#xff0c;其中 V 表示图中点的集…

FPGA:RS编码仿真过程

FPGA&#xff1a;RS编码仿真过程 RS码是一种纠错性能很强的线性纠错码&#xff0c;能够纠正随机错误和突发错误。RS码是一种多进制BCH码&#xff0c;能够同时纠正多个码元错误。 之前已经记录了在MATLAB中进行rs编解码的过程&#xff0c;现在利用FPGA的IP核实现RS编码的过程&…

Hlang社区-社区导航栏实现

文章目录 前言项目结构导航实现创作中心移动小球消息提示完整代码前言 okey,这里的话是我们社区导航栏的实现: 废话不多说,看看效果: 我甚至为此用New Bing生成了一个Logo。 项目结构 废话不多说,先来看到我们的项目结构: 在这里导航栏是一个组件。 在App.vue里面直…

POST请求负载form-data表单数据需要同步修改header的Content-type

需要读公司的一个接口&#xff0c;显示负载是“表单数据” 一开始没注意类型&#xff0c;按照公司其他接口的情况用了json&#xff0c;结果返回的数据时间阶段没有体现dct的要求&#xff0c;脚本如下&#xff08;错误示范&#xff09; from requests import post from json im…

企业权限管理(十六)-aop日志

SysLog实体类 public class SysLog {private String id;private Date visitTime;private String visitTimeStr;private String username;private String ip;private String url;private Long executionTime;private String method;public String getId() {return id;}public v…

Request+Response

文章目录 1. 介绍2. Request对象2.1 Request继承体系2.2 Request获取请求数据1.获取请求行2.获取请求头3.获取请求体4. 请求参数的通用方式5. 解决中文乱码问题 2.3 Request请求转发请求转发资源间共享数据: 3. Response对象3.0 Response 继承体系3.1 Response设置响应数据的功…

RK3288Android7.1上10寸mipi屏兼容

需求&#xff1a;RK3288Android7.1上10寸mipi屏兼容 思路&#xff1a; 1、修改屏幕厂商提供的屏幕初始化指令为rk可以识别的格式存放在panel-init-sequence 2、修改屏参display-timings 3、确定reset-gpio 实现&#xff1a; 首先根据屏幕厂商提供的初始化指令将panel-init-seq…

AMS的起源,SystemServer的前世今生

作者&#xff1a;OpenGL 前世 SystemServer的创建还得追溯到之前的Zygote进程中的ZygoteInit代码中。这里的Zygote.forkSystemServer()方法就是实现分裂的关键代码。它内部调用了native方法实现了进程分裂。 执行完这行代码之后。我们的系统中就会出现两个一模一样的进程&…

复现基于PYNQ-Z2的手写数字识别卷积加速器设计

来源雪天鱼 基于PYNQ-Z2的手写数字识别卷积加速器设计【持续更新】_雪天鱼的博客-CSDN博客 一、设计思路 1、输入28 x 28 的图片&#xff0c;非png格式&#xff0c;而是txt格式&#xff0c;将图片数据进行量化&#xff0c;存入到txt文件当中。 2、在PL端实现卷积神经网络LeN…

关于Linux Docker springboot jar 日志时间不正确 问题解决

使用Springboot项目的jar&#xff0c;制作了一个Docker镜像&#xff0c;启动该镜像后发现容器和容器中的Springboot 项目的日志时间不正确。 解决 查看容器时间命令为&#xff1a; docker exec 容器id date 1. 容器与宿主机同步时间 在启动镜像时候把操作系统的时间通过&q…

可白嫖的4家免费CDN,并测试其网络加速情况(2023版)

网站加载速度优化过程中&#xff0c;不可避免的会用上CDN来加速资源的请求速度。但是市面上的CDN资源几乎都是要收费的&#xff0c;而且价格还不便宜&#xff0c;对于小公司站长来讲&#xff0c;这将是一笔不小的开销。不过还是有一些良心公司给我们提供了免费的资源&#xff0…