博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
采用实例演示Vue生命周期
阅读量:3906 次
发布时间:2019-05-23

本文共 5598 字,大约阅读时间需要 18 分钟。

Vue的生命周期的理解

Vue的生命周期

主要划分的时期为
1、before Create
2、created
3、before Mount
4、mounted
5、before Update
6、updated
7、before Destroy
8、destroyed
下面对这些时期一一分析

演示使用的Vue实例

var vm=new Vue({
el:'#app', data:{
msg:"ok" }, methods:{
show(){
console.log("执行show方法"); } },

before Create时期

var vm=new Vue({
el:'#app', data:{
msg:"ok" }, methods:{
show(){
console.log("执行show方法"); } }, beforeCreate() {
console.log(this.msg); this.show(); },

在这里插入图片描述

此时的msg属性是undefined同时报错说show不是一个函数说明此时
Vue实例刚从内存中被创建出来,此时还没有初始化好data和methods属性

created

var vm=new Vue({
el:'#app', data:{
msg:"ok" }, methods:{
show(){
console.log("执行show方法"); } }, beforeCreate() {
// console.log(this.msg); // this.show(); }, created() {
console.log(this.msg); this.show(); console.log(document.getElementById('h3').innerText) },

在这里插入图片描述

可以看到这个时候data和methods已经创建好了调用是没有问题的,正常显示。但是此时还没有开始编译模板,所以此时显示的是没有加载好的模板{
{msg}}。

before Mount

var vm=new Vue({
el:'#app', data:{
msg:"ok" }, methods:{
show(){
console.log("执行show方法"); } }, beforeCreate() {
// console.log(this.msg); // this.show(); }, created() {
// console.log(this.msg); // this.show(); // console.log(document.getElementById('h3').innerText); }, beforeMount() {
console.log(document.getElementById('h3').innerText); },

在这里插入图片描述

此时已经完成了模板的编译但是还没有挂载到页面中所以此时显示的任然是模板而不是最后的ok

mounted

var vm=new Vue({
el:'#app', data:{
msg:"ok" }, methods:{
show(){
console.log("执行show方法"); } }, beforeCreate() {
// console.log(this.msg); // this.show(); }, created() {
// console.log(this.msg); // this.show(); // console.log(document.getElementById('h3').innerText); }, beforeMount() {
// console.log(document.getElementById('h3').innerText); }, mounted() {
console.log(document.getElementById('h3').innerText); }, });

在这里插入图片描述

此时,已经将编译好了的模板挂载到了页面的指定的容器中显示所以此时显示的就是ok而不是{
{msg}}

before Update

var vm=new Vue({
el:'#app', data:{
msg:"ok" }, methods:{
show(){
console.log("执行show方法"); } }, beforeCreate() {
// console.log(this.msg); // this.show(); }, created() {
// console.log(this.msg); // this.show(); // console.log(document.getElementById('h3').innerText); }, beforeMount() {
// console.log(document.getElementById('h3').innerText); }, mounted() {
console.log(document.getElementById('h3').innerText); }, beforeUpdate() {
console.log("界面上的msg:"+document.getElementById('h3').innerText); console.log("data中的数据msg:"+this.msg); }, });

在这里插入图片描述

注意这个阶段和后面的update阶段都是属于页面运行中的生命周期,并且只有在页面数据发生改变时才会进入该阶段。可以看到此时页面的数据是ok而data中的数据为No,这是因为此时还没有开始重新加载DOM节点。

update

var vm=new Vue({
el:'#app', data:{
msg:"ok" }, methods:{
show(){
console.log("执行show方法"); } }, beforeCreate() {
// console.log(this.msg); // this.show(); }, created() {
// console.log(this.msg); // this.show(); // console.log(document.getElementById('h3').innerText); }, beforeMount() {
// console.log(document.getElementById('h3').innerText); }, mounted() {
console.log(document.getElementById('h3').innerText); }, beforeUpdate() {
// console.log("界面上的msg:"+document.getElementById('h3').innerText); // console.log("data中的数据msg:"+this.msg); }, updated () {
console.log("界面上的msg:"+document.getElementById('h3').innerText); console.log("data中的数据msg:"+this.msg); }, });

在这里插入图片描述

此时页面上的数据和data中的数据是一致的,这是因为实例更新完毕后调用此函数,此时data中的状态值和界面上显示的数据都已经完成了更新,界面已经被重新渲染好了。

before Destroy

因为不知道如何进入这个阶段所以这个阶段就没有实例显示了,最后一个阶段也是。

实例销毁前调用,在这个阶段实例任然可以使用。

destroy

Vue实例销毁后使用,调用后,Vue实例指示的所有东西都会解绑,所有的事件监听都会被移除,所有的子实例也会被销毁。

转载地址:http://ogren.baihongyu.com/

你可能感兴趣的文章
linq 查询的结果会开辟新的内存吗?
查看>>
WPF开发的实用小工具 - 快捷悬浮菜单
查看>>
.Net orm 开源项目 FreeSql 2.0.0
查看>>
多线程并发如何高效实现生产者/消费者?
查看>>
学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片
查看>>
IdentityServer4系列 | 简化模式
查看>>
如何在 C# 中使用 AutoMapper
查看>>
BCVP开发者说第4期:Remember.Core
查看>>
Entity Framework Core 5中实现批量更新、删除
查看>>
小试YARP
查看>>
如何使用 C# 中的 HashSet
查看>>
api-hook,更轻量的接口测试工具
查看>>
一个情怀引发的生产事故(续)
查看>>
做架构也得讲武德
查看>>
PHP大势已去,PHP宝藏可为我所用
查看>>
asp.net core 集成 prometheus
查看>>
如何在 .NET 中使用 Redis缓存
查看>>
C#阻塞队列BlockingCollection
查看>>
在传统行业做数字化转型之业务篇
查看>>
如何在 C# 中使用 RabbitMQ
查看>>