Vue实例的生命周期

简介

  每个 Vue 实例在被创建之前都要经过一系列的初始化过程,在这个过程中,实例会调用一些生命周期钩子,这就给我们提供了执行自定义逻辑的机会。

beforeCreate

  在实例初始化之后,数据绑定之前会调用这个函数。

示例:

  var vm = new Vue({
        el: '#app',
        data: function() {
            return {
                message: 'Hello Vue'
            }
        },
        beforeCreate: function() {
            console.log(this.message);    // undefind
            console.log(this.$options.data().message);    // Hello Vue
        }
    });

注:1、在 Vue 中,所有生命周期钩子函数中使用的“this”都是指向调用它的 Vue 实例,即 vm;2、Vue 实例同时也代理了选项中“data”下的所有属性,也就是说 vm.message = vm.$data.message = “Hello Vue”。但是,在这个阶段数据还没有绑定到 Vue 实例上面,所以输出 “undefind”。如果需要在这个阶段获取数据,可以使用 vm.$options.data() 返回“data”对象,或者通过 vm.$options.data().message 返回对应的值。

在这个阶段可以做一些不需要数据的工作。

created

  在数据绑定之后会调用这个函数。

示例:

    var vm = new Vue({
        el: '#app',
        data: function() {
            return {
                message: 'Hello Vue'
            }
        },
        created: function() {
            console.log(this.message);    // Hello Vue
        }
    });

在这个阶段数据已经初始化为选项中的默认值,可以对数据进行操作,如向后端发请求获取服务器上的数据并绑定到响应式系统上。

之后,判断有无“el”选项(作为 Vue 实例的挂载目标),如果没有则需要手动调用 vm.$mount() 指定挂载目标,才会进行后面的步骤。

接着,判断有无“template”选项,如果没有则直接使用“el”选项指定的挂载目标,如果有则使用“template”选项中的字符串模板替换挂载目标,挂载目标中的所有内容都将被忽略。

注:在渲染页面的过程中,由于 html 是从上到下依次解析的,所以会先看到 Mustache 标签一闪而过,等到 Vue 实例创建完成之后才被替换为对应的值。这个问题的解决办法是:为 “el”指定的挂载元素添加 “v-cloak”指令,并在 css 中指定“[v-cloak] {display:none}”样式,关联实例编译结束后会自动移除这个指令。

beforeMount

  在 Vue 实例挂载之前会调用这个函数。

mounted

  在 Vue 实例挂载之后会调用这个函数。

示例:

    var vm = new Vue({
        el: '#app',
        data: function() {
            return {
                message: 'Hello Vue'
            }
        },
        beforeMount: function() {
            console.log(this.$el);    
            /* <div >
        },
        mounted: function() {
            console.log(this.$el);
            /* <div >
        }
    });

在这个阶段可以对 DOM 进行操作。

beforeUpdate

在数据更新之前会调用这个函数。

在这个阶段可以访问数据更新前的 DOM。

updated

在数据更新之后会调用这个函数。

在这个阶段可以访问数据更新后的 DOM。

beforeDestroy

在 Vue 实例销毁之前会调用这个函数。

destroyed

在 Vue 实例销毁之后会调用这个函数。