Vue生命周期

概述

Vue生命周期函数主要包含8个部分,按顺序分别是:

1. beforeCreate(创建前)
2. created (创建后)
3. beforeMount (载入前)
4. mounted (载入后)
5. beforeUpdate (更新前)
6. updated (更新后)
7. beforeDestroy( 销毁前)
8. destroyed (销毁后)

生命周期函数详细介绍

beforeCreate()

Vue创建前,此阶段为实例初始化之后,this指向创建的实例,数据观察,数据监听事件机制都未形成,不能获得DOM节点。data,computed,watch,methods 上的方法和数据均不能访问,注:data和methods的数据都还未初始化。

可在此处安装全局事件总线。

如下所示

const vm = new Vue({
  el: "#root",
  data: {
    n:1
  },
  computed: {
    n1(){
      return n+1
    }
  },
  beforeCreate(){
    console.log(this)
    console.log(this.n)
    console.log(this.n1)
    debugger
  }
});

created()

Vue创建后,此阶段为实例初始化之后,data、props、computed的初始化导入完成, 注:要调用methods中的方法,或者操作data中的数据,最早只能在Created中操作。此时能访问 data computed watch methods 上的方法和数据,初始化完成时的事件写这个里面,但此阶段还未挂载DOM。

const vm = new Vue({
  el: "#root",
  data: {
    n:1
  },
  methods: {
    n1(){
      return this.n+1
    }
  },
  created(){
    console.log(this.n)
    console.log(this.n1())
    console.log(this.$el)
    debugger
  }
});

beforeMount()

Vue载入前,阶段执行时,模板已经在内存中编译好了,但是未挂载到页面中。在这一阶段,虽然页面还是旧的,但vue挂载的根节点已经创建,下面vue对DOM的操作将围绕这个根元素继续进行。

<body>
  <div id="root">
    <h1>{{n}}</h1>
    <button @click="n++">点我+1</button>
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#root",
    beforeMount(){
      console.log(this.$el)
      debugger
    },
  });
</script>

mounted()

Vue载入后,(完成创建vm.$el,和双向绑定); 只要执行完mounted,就表示整个Vue实例已经初始化完成了,此时组件已经脱离里了创建阶段, 进入到了运行阶段。

(使用较多,反正我使用较多- -,因为此阶段组件算是正式完成了构建,通常用来做初始化,比如一些数据结构较为复杂,不想做响应式的全局变量)

beforeUpdate()

Vue更新前, 当执行beforeUpdate的时候,页面中显示的数据还是旧的,此时data数据是最新的,页面尚未和最新数据数据保持同步。但是DOM中的数据会改变,这是vue双向数据绑定的作用,可在更新前访问现有的DOM,如手动移出添加的事件监听器。

<body>
  <div id="root">
    <h1>{{n}}</h1>
    <button @click="n++">点我+1</button>
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#root",
    data:{
      n:1
    },
    beforeUpdate(){
console.log("beforeUpdate...") console.log(
this.n) debugger }, }); </script>

 updata()

更新完成后。

注意:不要再此函数中操作数据,否则会陷入死循环

beforeDestroy()

组件销毁前,会先执行beforeDestroy。此时所有date和methods以及过滤器和指令都是处于可用状态,还没有真正的执行销毁过程

<body>
  <div id="root">
    <h1>{{n}}</h1>
    <button @click="$destroy()">销毁</button>
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#root",
    data:{
      n:1
    },
    beforeDestroy(){
      console.log("即将销毁。。。")
      console.log(this.n)
      debugger
    },
  });
</script>

destroyed()

Vue销毁后, 当执行到destroyed函数的时候,组件已经完全销毁,此时组件中的所有的数据,方法,指令,过滤器...都已经销毁

posted @ 2022-12-22 21:09  邢韬  阅读(319)  评论(0编辑  收藏  举报