简述vue生命周期的含义,简述vue生命周期及其用途

  简述vue生命周期的含义,简述vue生命周期及其用途

  本文主要介绍对vue生命周期的深入理解。通过示例代码进行了非常详细的介绍,对于大家的学习或者工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。

  

目录

  一、Vue II的生命周期介绍。钩子详解1。在创建2之前。创造了3。在4号山之前。已安装5。更新6之前。更新7。在摧毁8号之前。摧毁补充$山三。钩子的一些实际用法。异步函数

  

一.Vue生命周期简介

  https://cn.vuejs.org/v2/api/#beforeCreate,官方网站

  Vue实例从创建到销毁的过程就是生命周期。详细来说就是创建、初始化数据、编译模板、挂载Dom、渲染更新渲染、卸载等一系列过程。

  先来看看官网的生命周期图(我自己做了一点评论):

  Vue提供的挂钩就是上图中的红色文字。

  

二.钩子详解

  

1.beforeCreate

  在实例初始化之后,数据观察器和事件/观察器事件配置在之前被调用。

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  标题文档/标题

  !-介绍vue.js -

  脚本类型=text/javascript src=。/vue . js /脚本

  /头

  身体

  div id=应用程序

  输入类型=text name= v-model=message

  { {消息}}

  /div

  脚本类型=文本/javascript

  //实例化Vue

  var app=新Vue({

  埃尔: #app ,

  数据:{

  消息:“这是毫秒数”

  },

  //时刻监控数据报文的变化。一旦发生这种变化,该功能将被暂停。

  观察:{

  //消息必须与被监视的数据同名。

  消息:函数(){

  Console.log(观察:,消息已更改)

  }

  },

  方法:{

  init:函数(){

  Console.log(这是初始化方法)

  }

  },

  //我们在beforeCreate钩子中调用Vue的数据和方法

  创建之前:函数(){

  console.log(beforeCreate ,this . message);

  this . init();

  }

  })

  /脚本

  /body

  /html

  在上面的例子中,我们在的beforeCreate钩子中调用了Vue的数据和方法,所以我们来看看结果:

  可以看出Vue中的数据和方法是不可访问的,是在wath之前执行的。

  

2.created

  实例在创建后被调用。在这一步中,实例已经完成了以下配置:数据观察器、属性和方法的操作以及watch/event事件的回调。但是,挂载阶段还没有开始,$el属性目前是不可见的。

  主要应用:调用数据,调用方法,调用异步函数

  div id=应用程序

  保险商实验所

  li v-for=(item,index)of list key= index { { item } }-{ { message } }/Li

  /ul

  pp1/p

  pp1/p

  pp1/p

  /div

  脚本类型=文本/javascript

  //实例化Vue

  var app=新Vue({

  埃尔: #app ,

  数据:{

  消息:“这是毫秒数”,

  列表:[aaaaaaaa , bbbbbbb , ccccccc]

  },

  //时刻监控数据报文的变化。一旦发生这种变化,该功能将被暂停。

  观察:{

  //消息必须与被监视的数据同名。

  消息:函数(){

  Console.log(观察:,消息已更改)

  }

  },

  方法:{

  foo:function(){

  Console.log(foo:,这是初始化方法)

  }

  },

  //创建的挂钩

  已创建:函数(){

  //调用Vue的数据

  console.log(created:,this . message);

  //调用Vue方法

  this . foo();

  //因为我们通过v-for循环遍历li,所以创建之前的挂载阶段还没有开始。也不可能弄清楚李的底细。

  Console.log(li quantity:,document . getelementsbytagname( Li )。长度);

  //可以直接获取直接加载的DOM。

  Console.log(p编号:,document.getelementsbyname (p )。长度);

  },

  })

  /脚本

  结果:

  可以看到,创建的hook可以获取Vue的数据,调用Vue方法,获取直接从原HTML加载的DOM,但无法获取挂载模板生成的DOM(比如v-for循环通过Vue.list生成li)

  

3.beforeMount

  在挂载开始之前调用:第一次调用相关的渲染函数(模板)。

  比如v-for生成的html还没有挂载到页面上。

  (后跟2个创建的代码)

  beforeMount:函数(){

  console.log(beforeMount:,document . getelementsbytagname( Li )。长度);

  },

  装载前的结果:1

  

4.mounted

  El被新创建的vm替换。$el,钩子在装入实例后被调用。

  有初始值的DOM渲染,例如我们的初始数据list,渲染出来的li,只有这里才能获取

  (后跟2个创建的代码)

  已安装:函数(){

  console.log(mounted:,document . getelementsbytagname( Li )。长度);

  },

  结果已安装:3

  我们可以看到它安装在这里的实例上,我们可以得到李的编号。

  

5.beforeUpdate

  当数据更新时调用,这发生在重新呈现和修补虚拟DOM之前。您可以进一步更改此挂钩中的状态,这将不会触发额外的重新渲染。

  当我们更改Vue的任何数据时,都会触发该功能。

  更新之前:函数(){

  Console.log(在Update挂钩执行之前.);

  console . log( before update: this . message)

  },

  

6.updated

  由于数据变化,虚拟DOM被重新渲染和修补,之后钩子将被调用。

  当这个钩子被调用时,组件DOM已经被更新,所以现在可以执行依赖于DOM的操作了。但是,在大多数情况下,您应该避免在此期间更改状态,因为这可能导致更新的无限循环。

  在服务器端呈现期间不调用此挂钩。

  数据更新时会触发(vue的所有数据只有更新时才会触发)。如果想一次统一处理数据,可以用这个。如果想对不同的数据更新进行不同的处理,可以使用nextTick或watch进行监控。

  已更新:函数(){

  Console.log(更新的挂钩执行.);

  console.log(已更新:,this.message)

  },

  

7.beforeDestroy

  在实例被销毁之前调用。在这一步,实例仍然完全可用。

  

8.destroyed

  在销毁Vue实例后调用。调用后,Vue实例指示的所有内容都将被解除绑定,所有事件侦听器都将被移除,所有子实例都将被销毁。在服务器端呈现期间不调用此挂钩。

  div id=应用程序

  /div

  脚本类型=文本/javascript

  //实例化Vue

  var app=新Vue({

  埃尔: #app ,

  数据:{

  消息:“这是毫秒数”,

  },

  销毁前:函数(){

  Console.log(在Destroy挂钩执行之前.this.message)

  },

  已销毁:函数(){

  Console.log(已销毁的挂钩执行.this.message)

  }

  })

  //销毁Vue实例,触发beforeDestroy和destroyed函数。

  app。$destroy()

  /脚本

  结果:

  可以看出,这两个函数在Vue实例被销毁时都会被调用。

  

补充$mount

  当你的vue不挂在el的时候我们可以用$mount。

  var app=新Vue({

  数据:{

  消息:“这是毫秒数”,

  },

  }).$ mount(“# app”)

  

三.钩子的一些实战用法

  

1.异步函数

  这里我们使用定时器作为异步函数。

  div id=应用程序

  保险商实验所

  li v-for=(item,index)of list key= index { { item } }/Li

  /ul

  /div

  脚本类型=文本/javascript

  var app=新Vue({

  埃尔: #app ,

  数据:{

  列表:[aaaaaaaa , bbbbbbb , ccccccc]

  },

  已创建:函数(){

  Consoloe.log(创建的异步:aaaaa );

  //异步获取数据

  //因为是异步的,就像我们用ajax获取数据一样。

  setTimeout(()={

  this.list=[111 , 222 , 333 , 444],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  },0)

  },

  已安装:函数(){

  console.log(mounted:,document . getelementsbytagname( Li )。长度);

  },

  已更新:函数(){

  console.log(updated:,document . getelementsbytagname( Li )。长度)

  },

  })

  /脚本

  结果为:

  创建:aaaaaaaa

  已安装:3

  创建的异步函数:3

  更新日期:4

  解释:

  可以看到异步函数被添加到created的钩子中,所以函数的执行顺序是:

  Ced hook,mounted hook,异步函数,updated hook(根据事件队列原理,只有更新后,li才是真实的,DOM渲染为4,所以异步函数中获取的li数就是没有变化的li数)。

  Mounted获取的是Vue的数据中设置初始值渲染的DOM,而我们是异步函数中变化的列表数据,所以mounted获取的li数是3。

  只要data vue绑定的数据发生变化就触发update函数,所以最后执行,也就是4。

  这是否意味着可以直接在更新功能中操作?其实并没有,因为更新功能针对的是vue所有数据的变化,我们也可能会有其他数据的变化。

  例如,下面的例子:

  //我们用异步函数修改了两次列表,发现更新被触发了两次。

  已创建:函数(){

  //异步获取数据

  //因为是异步的,就像我们用ajax获取数据一样。

  setTimeout(()={

  this.list=[111 , 222 , 333 , 444],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  },0)

  setTimeout(()={

  This.list=[快乐大本营,脚踏实地, 300033 ,天天向上,好好学习],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  },1000)

  },

  已安装:函数(){

  console.log(mounted:,document . getelementsbytagname( Li )。长度);

  },

  已更新:函数(){

  console.log(updated:,document . getelementsbytagname( Li )。长度)

  },

  结果为:

  2.Vue.nextTick对异步函数的结果进行操作

  当我们想要改变数据时,我们每个人都触发自己的方法。

  已创建:函数(){

  //异步获取数据

  //因为是异步的,就像我们用ajax获取数据一样。

  //为了在数据改变后等待Vue完成更新DOM,可以在数据改变后立即使用Vue.nextTick(callback)。这样,回调函数将在DOM更新完成后被调用。

  setTimeout(()={

  this.list=[111 , 222 , 333 , 444],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  这个。$nextTick(function(){

  console.log(created$nextTick:,document . getelementsbytagname( Li )。长度)

  });

  },0)

  setTimeout(()={

  This.list=[快乐大本营,脚踏实地, 300033 ,天天向上,好好学习],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  这个。$nextTick(function(){

  console.log(created$nextTick:,document . getelementsbytagname( Li )。长度)

  });

  },1000)

  },

  已安装:函数(){

  console.log(mounted:,document . getelementsbytagname( Li )。长度);

  },

  已更新:函数(){

  console.log(updated:,document . getelementsbytagname( Li )。长度)

  },

  结果:

  我们可以看到,通过$nextTick,我们可以对异步函数的结果进行操作。

  关于对vue生命周期的深入了解,本文到此结束。更多关于理解vue生命周期的信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: