Vue学习计划-Vue2--Vue核心(七)生命周期

news2024/11/27 20:59:51

抛出问题:一进入页面就开启一个定时器,每隔1秒count就加1,如何实现
示例:

<body>
<div id="app">
    {{ n }}
    <button @click="add">执行</button>
</div>

<script>
    let vm = new Vue({
        el: "#app",
        data:{
            n: 1
        },
        methods: {
            add(){
                // this.n ++
                setInterval(()=>{
                    this.n ++
                },1000)
            }
        },
        // 特定时期调用特定函数(这就是 生命周期函数/钩子函数 )
        // 表示页面渲染完成之后
        mounted(){
            setInterval(()=>{
                this.n ++
            },1000)   
        }
    })
    // 外部执行 不推荐,开启了定时器,最后要销毁的
    // setInterval(()=>{
    //     vm.n ++
    // },1000)
</script>
</body>

下面正式进入生命周期

1. 生命周期

  1. 常用的生命周期钩子:
    1. mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】
    2. beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】
  2. 关于销毁Vue实例
    1. 销毁后借助Vue开发者工具看不到任何消息
    2. 销毁后自定义事件会失效
    3. 一般不会在beforeDestroy操作数据,因为即便操作数据,也不会在触发更新流程了
    4. vm.$destroy():完全销毁一个实例。清理它与其它实例的连接,解绑它的全部指令及事件监听器。
  3. vm的生命周期
    1. 将要创建 ==> 调用beforeCreate函数
    2. 创建完毕 ==> 调用created函数
    3. 将要挂载 ==> 调用beforeMount函数
    4. (重要)挂载完毕 ==> 调用mounted函数 =====>【重要的钩子】
    5. 将要更新 ==> 调用beforeUpdate函数
    6. 更新完毕 ==> 调用updated函数
    7. (重要)将要销毁 ==> 调用beforeDestroy函数 =====>【重要的钩子】
    8. 销毁完毕 ==> 调用destroyed函数
  4. 注意:
    $destory方法进入销毁生命周期,进入beforeDestroy后,销毁页面。vue-tools就不在监视,并且页面dom与Vue断了联系,点击页面事件已经无反应

在这里插入图片描述
示例:

	<!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="./vue.js"></script>
	</head>
	<body>
	<div id="app" :x="n">
	    <h2>当前的n值是:{{ n }}</h2>
	    <button @click="add">添加</button>
	    <button @click="bye">销毁</button>
	</div>
	
	<script>
	    const vm = new Vue({
	        el: "#app",
	        // template:'<h2>当前的n值是:{{ n }}</h2><button @click="add">添加</button> <button @click="bye">销毁</button> ', // 模板不能空格
	        // template:`
	        // <div>
	        // 		<template>
	       //     		<h2>当前的n值是:{{ n }}</h2>
	        //   		<button @click="add">添加</button> 
	        //     		<button @click="bye">销毁</button> 
	        // 		</template>
	        // </div>
	        // `,
	        // template:`
	        // <div>
	        //     <h2>当前的n值是:{{ n }}</h2>
	        //     <button @click="add">添加</button> 
	        //     <button @click="bye">销毁</button> 
	        // </div>
	        // `,
	        data: {
	            n: 1
	        },
	        methods: {
	            add(){
	                console.log("add")
	                this.n ++
	            },
	            bye(){
	                this.$destroy()
	            }
	        },
	        beforeCreate() {
	            console.log('beforeCreate');
	            // console.log(this)
	            // debugger
	        },
	        created() {
	            console.log('created');
	            // console.log(this)
	            // debugger
	        },
	        beforeMount() {
	            console.log('beforeMount');
	            console.log(this);
	            // 最终都不奏效
	            // document.querySelector("h2").innerText = "哈哈"
	            // debugger
	        },
	        mounted() {
	            console.log('mounted');
	            console.log(this.$el)
	            // 可以修改真实DOM,不推荐
	            // document.querySelector("h2").innerText = "哈哈"
	            // console.log(this)
	            // debugger
	        },
	        beforeUpdate() {
	            console.log('beforeUpdate');
	            // console.log(this.n)
	            // debugger
	        },
	        updated() {
	            console.log('updated');
	            // this.n = 99
	            // console.log(this.n)
	            // debugger
	        },
	        beforeDestroy() {
	            console.log('beforeDestroy');
	            console.log(this.n)
	            this.n = 99
	            // debugger
	        },
	        destroyed() {
	            console.log('destroyed');
	            // console.log(this)
	            // debugger
	        },
	    })
	    // vm.$mount("#app")
	</script>
	</body>
	</html>

回归问题:beforeDestroy生命周期内清除定时器

<body>
<div id="app">
  <p v-text="n"></p>
  <h2>此时的n值是:{{ n }}</h2>
  <button @click="n=99">n值设置为99</button>
  <button @click="bye">停止</button>
</div>

<script>
    let vm = new Vue({
        el: "#app",
        data:{
            n: 1
        },
        methods: {
          bye(){
         	// 手动清除定时器,DOM和Vue还有联系,所以点击n=99还能实现
            // clearInterval()
            // clearInterval(this.timer)
            // 手动调用$destory方法进入销毁生命周期,对比区别:进入beforeDestroy后,销毁页面。vue-tools就不在监视。并且页面dom与Vue断了联系,点击n=99,已经无反应
            this.$destroy()
          }
        },
        mounted(){
          console.log("mounted")
          this.timer = setInterval(()=>{
              console.log('setInterval')
              this.n ++
          },1000)   
        },
        beforeDestroy(){
          console.log(111);
          clearInterval(this.timer)
        }
    })
</script>

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

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

相关文章

西工大计算机学院计算机系统基础实验一(函数编写15~17)

还是那句话&#xff0c;稳住心态&#xff0c;稳住心态&#xff0c;稳住心态。心里别慌&#xff0c;心里别慌&#xff0c;心里别慌。 第15题&#xff0c;howManyBits&#xff0c;返回用二进制补码形式表示x所需的最小二进制位数。比如howManyBits(12) 5&#xff0c;12可以被表…

高级实现Java的七大热门技术框架解析源码特性分析

Java是一门广泛应用的编程语言&#xff0c;拥有众多热门技术框架。本文将通过解析源码和特性分析&#xff0c;带你深入了解Java的七大热门技术框架&#xff0c;并提供相关示例代码。 一、Spring框架 Spring是Java最流行的开发框架之一&#xff0c;提供了依赖注入&#xff08;D…

电商早报 | 12月7日| 阿里巴巴分红179亿,破历史记录

阿里巴巴将派发25亿美元年度股息 12月6日消息&#xff0c;阿里巴巴发布公告&#xff0c;将向截至2023年12月21日香港时间及纽约时间收市时登记在册的普通股持有人和美国存托股持有人&#xff0c;就2023财年首次派发年度股息&#xff0c;金额分别为每股普通股0.125美元或每股美…

mysql知识分享(包含安装卸载)(一)

如果博客有错误&#xff0c;请佬指正。 目录 注意&#xff1a;打开cmd时要有管理员身份打开&#xff0c;重要 为何使用数据库&#xff1f; 数据库的相关概念 关系型数据库 关系型数据库设计规则 表&#xff0c;记录&#xff0c;字段 表的关联关系 一对一关联 一对多关系 …

如何衡量和提高测试覆盖率?

衡量和提高测试覆盖率&#xff0c;对于尽早发现软件缺陷、提高软件质量和用户满意度&#xff0c;都具有重要意义。如果测试覆盖率低&#xff0c;意味着用例未覆盖到产品的所有代码路径和场景&#xff0c;这可能导致未及时发现潜在缺陷&#xff0c;代码中可能存在逻辑错误、边界…

[Geek Challenge 2023] web题解

文章目录 EzHttpunsignn00b_Uploadeasy_phpEzRceezpythonezrfi EzHttp 按照提示POST传参 发现密码错误 F12找到hint&#xff0c;提示./robots.txt 访问一下&#xff0c;得到密码 然后就是http请求的基础知识 抓包修改 最后就是 我们直接添加请求头O2TAKUXX: GiveMeFlag 得到…

vue中的动画组件使用及如何在vue中使用animate.css

“< Transition >” 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-show 所触…

用 C 写一个卷积神经网络

用 C 写一个卷积神经网络 深度学习领域最近发展很快&#xff0c;前一段时间读transformer论文《Attention Is All You Need》时&#xff0c;被一些神经网络和深度学习的概念搞得云里雾里&#xff0c;其实也根本没读懂。发现深度学习和传统的软件开发工程领域的差别挺大&#xf…

数据结构:图文详解双向链表的各种操作(头插法,尾插法,任意位置插入,查询节点,删除节点,求链表的长度... ...)

目录 一.双向链表的概念 二.双向链表的数据结构 三.双向链表的实现 节点的插入 头插法 尾插法 任意位置插入 节点的删除 删除链表中第一次出现的目标节点 删除链表中所有与关键字相同的节点 节点的查找 链表的清空 链表的长度 四.模拟实现链表的完整代码 前言&am…

多人群聊代码

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

5G - NR物理层解决方案支持6G非地面网络中的高移动性

文章目录 非地面网络场景链路仿真参数实验仿真结果 非地面网络场景 链路仿真参数 实验仿真结果 Figure 5 && Figure 6&#xff1a;不同信噪比下的BER和吞吐量 变量 SISO 2x2MIMO 2x4MIMO 2x8MIMOReyleigh衰落、Rician衰落、多径TDL-A(NLOS) 、TDL-E(LOS)(a)QPSK (b)16…

echarts环形饼图

效果示例 代码汇总 pieCharts() {let data [];const providerResult [{name: 智诺, value: 23},{name: 海康, value: 5},{name: 大华, value: 5}, {name: 云科, value: 23},{name: 四信, value: 22},{name: 九物, value: 22}]let charts echarts.init(document.getElemen…

700G全球30米高程DEM原始数据

这里&#xff0c;为大家分享700G的全球30米高程原始数据。 全球30米高程覆盖范围 NASA全球30米SRTM高程DEM数据范围在南纬56度到北纬61度范围之间&#xff0c;共分为14520个区域范围。 每个区域范围在经纬度方向的跨度均为1度大小&#xff0c;将该接图表在微图中与影像叠加之…

【C++】如何优雅地把二维数组初始化为0

2023年12月7日&#xff0c;周四上午 目录 为什么要初始化二维数组不优雅的初始化方式&#xff1a;使用两个for循环优雅的初始化方式一&#xff1a;使用初始化列表优雅的初始化方式二&#xff1a;使用memset函数 为什么要初始化二维数组 如果不初始化二维数组&#xff0c;那么…

海云安参与制定《信息安全技术 移动互联网应用程序(App)软件开发工具包(SDK)安全要求》标准正式发布

近日&#xff0c;由TC260&#xff08;全国信息安全标准化技术委员会&#xff09;归口 &#xff0c;主管部门为国家标准化管理委员会&#xff0c;深圳海云安网络安全技术有限公司&#xff08;以下简称“海云安”&#xff09;等多家相关企事业单位共同参与编制的GB/T 43435-2023《…

在Mac上安装Windows应用程序的简便方法:CrossOver for Mac

对于许多Mac用户来说&#xff0c;有时候他们可能需要使用一些只有在Windows上才能找到的应用程序。以前&#xff0c;解决这个问题的方法是通过安装Windows虚拟机或使用双系统来在Mac上运行Windows应用程序。但这些方法需要额外的硬件资源和时间来配置&#xff0c;并且可能会导致…

JVM GUI可视化监控及诊断工具

工具既述 使用命令行工具或组合能帮您获取目标Java应用性能相关的基础信息&#xff0c;但它们存在下列局限&#xff1a; 无法获取方法级别的分析数据&#xff0c;如方法间的调用关系、各方法的调用次数和调用时间等&#xff08;这对定位应用性能瓶颈至关重要&#xff09;。要…

antdesign前端一直加载不出来

antdesign前端一直加载不出来 报错&#xff1a;Module “./querystring” does not exist in container. while loading “./querystring” from webpack/container/reference/mf at mf-va_remoteEntry.js:751:11 解决方案&#xff1a;Error: Module “xxx“ does not exist …

删除Ubuntu系统中的loop

sudo apt autoremove --purge snapd

【Windows Server 2019】 IIS+php56+mysql56470

文章目录 一、安装web服务器&#xff08;IIS&#xff09;二、安装php 5.6.31 nts1、前置配置2、设置iis3、验证php安装 三、安装MySQL下载Navicat Premium 四、测试 一、安装web服务器&#xff08;IIS&#xff09; 前面不多说&#xff0c;在角色服务中选择如下内容&#xff1a…