vue学习笔记(3)--vue的生命周期篇

生命周期图解

生命周期图官方地址
实际如下:(图片来源于vue官网)
vue生命周期图

上图就完全能解释整个vue的生命周期是怎样的一个过程

流程解释

1.实例化vue对象(new Vue()的过程)
2.初始化事件和生命周期 (执行init Event&Lifecycle)
3.beforeCreate() 在组件实例刚被创建还没实例化之前,执行一些初始化操作,比如加载动画等
4. 初始化注入和校验(init injections&reactivity )
5.created() 此时实例已经创建完成,属性也已经绑定了,但是这个时候dom还没有生成,
 	$el属性还不存在,页面没有展示,此处可以执行一些操作,比如结束加载动画 发起异步请求
6.这个时候判断是否有el属性,如果有就继续编译 如果没有就停止编译 生命周期到此就结束了 
 	直到在该vue实例上调用vm.$mount(el) 这样可以唤醒继续执行编译过程   如果注释掉 el:'#app' 这句话 
 	那么vue的生命周期就到created就停止了
7.如果有el属性或者通过vm.$mount(el)唤醒 继续执行之后。再判断是否有template 
 	如果有就将其编译成render()函数,并执行render()函数去渲染组件的内容。 
 	如果没有就将外部的HTML作为模板编译 , template中的模板优先级要高于外部HTML的优先级
8.beforeMount() 完成虚拟dom配置,这个时候模板已经被编译,把data里面的数据和模板已经生成html,
	但是这个时候还没有将html挂载都页面上
9.给vue实例对象添加$el成员(也就是创建vm.$el ),并且替换挂载的"el"对应的dom
10.mounted() 用上面已经编译好的html内容替换el属性指向的dom对象,这个方法结束之后dom结构正式完成
页面显示出来,可以发起网络请求。至此 初始化的生命周期暂时告一段落 挂载完毕
11 如果vue发现data里面的数据发生改变,会触发对应组件的重新渲染。首先执行beforeUpdate 
	(组件发生改变之前执行这个方法,这个时候页面还不会展示修改的内容,但是虚拟dom已经配置修改)
12.重新渲染虚拟dom,并通过diff算法比对节点差异 更新DOM(Virtual DOM re-render and patch)
13.updated() 组件更新之后执行这个方法,这个方法执行之后修改的页面展示出来,也就是view重新渲染,数据已经更新
14.当调用vm.$destory()  会先执行beforeDestroy()  这个在组件销毁之前调用,这个时候实例还是可用的
15.真正执行destory逻辑销毁vue实例,Teardown watcher,child components and event listeners   
	拆卸观察者,子组件,和事件监听者。
16.destoryed()  在vue实例销毁之后调用,调用之后 实例所指向的所有东西都会解绑,
	所有的事件监听也会被移除,所有的子组件也会被销毁  实例不可用

生命周期表格解释

周期说明
beforeCreate在实例初始化之后,数据观测和事件配置之前调用
created在实例创建完成之后调用,此时已经完成数据观测,属性和方法的运算,初始化事件,$el属性还未见
beforeMount在挂在之前被调用,相关的render函数首次被调用,只在虚拟dom生成html,还未挂在到页面上
mounted在el被创建的vm.$el替换并挂载到实例上去之后调用,这个时候的实例已经完成以下的配置:用上面编译好的html内容替换el属性指向的dom对象,完成模板中的html渲染到页面上,这个过程中可进行ajax交互
beforeUpdate在数据更新之前调用,发生在虚拟dom重新渲染和打补丁之前,可以在这个函数里面进一步修改数据,不会触发重复的渲染过程
updated在数据更改之后调用,此时重新渲染和打补丁已经执行完了,调用时组件dom已经更新了,此时可以执行依赖于dom的操作。但是大多数情况下 应该避免在此时修改数据状态,避免陷入更新的无限循环
beforeDestory在实例销毁之前调用,此时的实例还是可用的状态
destoryed在实例被销毁之后调用 此时的实例已不可用,调用之后所有的事件监听会被移除,子组件会被销毁

下面从代码方面体现下具体的过程

代码详解

//html部分
<div id="app">
	<span>{{pageMsg}}</span>
	<button @click="changeMsg()">改变初始值</button>
	<button @click="destoryMsg()">销毁实例</button>
</div>

//js部分
var app = new Vue({
	el:"#app",
	data:{
		pageMsg:"初始显示信息",
		count:1
	},
	methods:{
		changeMsg(){
			this.count++;
			this.pageMsg = "改变之后的值"+this.count;
		},
		destoryMsg(){
			this.$destroy();
		}
	},
	beforeCreate: function () {
        console.log('beforeCreate 创建前状态===============》');
        console.log("el:"+this.$el); //undefined
        console.log("data:"+this.$data); //undefined 
        console.log("pageMsg:"+this.pageMsg);
    },
    created: function () {
        console.log('created 创建完毕状态===============》');
        console.log("el:"+this.$el); //undefined
        console.log("data:"+this.$data); //已被初始化 
        console.log("pageMsg:"+this.pageMsg); //已被初始化
    },
    beforeMount: function () {
        console.log('beforeMount 挂载前状态===============》');
        console.log(("el:"+this.$el)); //已被初始化
        console.log("data:"+this.$data); //已被初始化  
        console.log("pageMsg:"+this.pageMsg); //已被初始化 
    },
    mounted: function () {
        console.log('mounted 挂载结束状态===============》');
        console.log("el:"+this.$el); //已被初始化
        console.log("data:"+this.$data); //已被初始化
        console.log("pageMsg:"+this.pageMsg); //已被初始化 
    },
    beforeUpdate: function () {
        console.log('beforeUpdate 更新前状态===============》');
        console.log("el:"+this.$el);
        console.log("data:"+this.$data); 
        console.log("pageMsg:"+this.pageMsg);
    },
    updated: function () {
        console.log('updated 更新完成状态===============》');
        console.log("el:"+this.$el); 
        console.log("data:"+this.$data); 
        console.log("pageMsg:"+this.pageMsg); 
    },
    beforeDestroy: function () {
        console.log('beforeDestroy 销毁前状态===============》');
        console.log("el:"+this.$el);     
        console.log("data:"+this.$data); 
        console.log("pageMsg:"+this.pageMsg); 
    },
    destroyed: function () {
        console.log('destroyed 销毁完成状态===============》');
        console.log("el:"+this.$el);  
        console.log("data:"+this.$data); 
        console.log("pageMsg:"+this.pageMsg)
    }
})

结果解析如下
在浏览器打开运行,查看console控制台,会有如下的打印

beforeCreate 创建前状态===============》
el:undefined
data:undefined
pageMsg:undefined
created 创建完毕状态===============》
el:undefined
data:[object Object]
pageMsg:初始显示的文字信息
beforeMount 挂载前状态===============》
el:undefined
data:[object Object]
pageMsg:初始显示的文字信息
mounted 挂载结束状态===============》
el:[object HTMLDivElement]
data:[object Object]
pageMsg:初始显示的文字信息

然后点击第一个按钮改变msg的值,又会有如下的打印

beforeUpdate 更新前状态===============》
el:[object HTMLDivElement]
data:[object Object]
pageMsg:改变之后的值2
updated 更新完成状态===============》
el:[object HTMLDivElement]
data:[object Object]
pageMsg:改变之后的值2

最后点击第二个按钮去销毁实例 会有如下打印

beforeDestroy 销毁前状态===============》
el:[object HTMLDivElement]
data:[object Object]
pageMsg:改变之后的值2
destroyed 销毁完成状态===============》
el:[object HTMLDivElement]
data:[object Object]
pageMsg:改变之后的值2

销毁之后再去操作第一个按钮 去改变msg的值 是不会生效的,也不会有任何新的打印
是因为销毁之后 实例上绑定的所有事件监听都被移除了,所有的子组件也都不存在了
但是已经存在的页面dom还是在的 页面的dom不能通过销毁实例而达到删除的效果 可以用v-if或者v-show来控制dom的显示与否 不要轻易手动调用destory去销毁实例

以上流程已经能比较清晰的看到整个周期的执行过程了
参考的网上的大牛的写法,然后按照自己的思路从头整了一遍
如遇侵权 请联系删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值