• 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 id="app" v-cloak><span>{{message}}</span></div> */
            },
            mounted: function() {
                console.log(this.$el);
                /* <div id="app"><span>Hello Vue</span></div> */
            }
        });

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

    beforeUpdate

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

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

    updated

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

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

    beforeDestroy

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

    destroyed

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

  • 相关阅读:
    [转]windows下安装Object-C开发环境
    [转]Creating Unit Tests for ASP.NET MVC Applications (C#)
    [转]如何在.NET MVC中使用jQuery并返回JSON数据
    [转]发送邮件提示“551 User not local; please try ”错误的原因及解决办法
    getHibernateTemplate().saveOrUpdate 不运行
    1503171912-ny-一道水题
    HDU 3466 Proud Merchants(01背包)
    error while loading shared libraries: libevent-1.x.so.1
    Android开发实例之闹钟提醒
    iOS 处理方法中的可变參数
  • 原文地址:https://www.cnblogs.com/blog-cxj2017522/p/12598420.html
Copyright © 2020-2023  润新知