美文网首页从0到1_前端开发
Web App开发--Vue生命周期与生命钩子

Web App开发--Vue生命周期与生命钩子

作者: ef43ffb32440 | 来源:发表于2017-05-06 17:37 被阅读519次

    Vue实例


    构造器

    在实例化 Vue 时,需要传入一个选项对象,它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。全部的选项可以在 API 文档中查看。

    每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的:

    var vm = new Vue({
      // 选项
    })
    
    Vue实例生命周期

    每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如,实例需要配置数据观测(data observer)、编译模版、挂载实例到 DOM ,然后在数据变化时更新 DOM 。在这个过程中,实例也会调用一些 生命周期钩子
    其它的钩子,在实例生命周期的不同阶段调用,如mountedupdateddestroyed 。钩子的 this 指向调用它的 Vue 实例。一些用户可能会问 Vue.js 是否有“控制器”的概念?答案是,没有。组件的自定义逻辑可以分布在这些钩子中。

    生命周期示意图


    <br />

    生命钩子的用法


    从上面的图片中可直到,Vue实例的生命钩子有beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroy
    另外,Vue的构造器还有其它的选项,如eldatacomputedwatchmethods等。
    创建一个Vue实例如下,不过一般用不上全部的构造器选项:

    new Vue({
        el: "#app",  
        data: {
            var1: xxx,
            var2: {
                innerVar1: xxx,
                innerVar2: xxx,
                innerVar3: xxx
            }
        },
        computed: {
            sumOfVar2: function() {
                return (this.var2.innerVar1 + this.var2.innerVar2 + this.var2.innerVar3);
            }
        },
        watch: {
             'var1': function() {
             },
            'var2.innerVar1': function() {          
            },
            'var2.innerVar2': function() {  
            },
            'var2.innerVar3': function() {  
            }   
        },
        methods: {
            func1: function() {
            },
            func2: function() {
            },
            func3: function() {
            }
        },
        beforeCreate: function () {
        },
        created: function () {
        },
        beforeMount: function () {
        },
        mounted: function() {
        },
        beforeUpdate: function () {
        },
        updated: function () {
        },
        beforeDestroy: function() {
        },
        destroyed: function() {
        }
    });
    

    我本人用的最多的是mountedupdated

    mounted在Vue实例挂载到Dom上执行,这个阶段网页还在加载。而且从页面开始加载到加载完成,mounted只执行一次。因此,不要在mounted中执行一些耗时的操作,否则会导致页面的加载速度变慢。mounted适合做一些数据和界面的初始化操作。

    由于mounted时实例已经挂载到Dom上,所以这是可以对元素节点进行一些操作。但如果某个元素节点用了v-if控制切换显示,而且初始时v-if的条件为假,则Dom上就没有该元素节点。这时即使在mounted中也获取不到该元素节点。

    updated在每次数据更新时都会执行。数据更新后可以在这里进行一些后续的操作。

    上一篇: Web App开发--vue.js入门与实践
    下一篇: Web App开发--Vue组件化应用构建

    相关文章

      网友评论

      • 几岁老人:mounted中获取数据?不是在created的时候吗?
        几岁老人:@honli 及时显示到界面的数据?比如具体的?那我在created的时候获取初始加载数据没问题的吧?主要是created和mounted具体的应用场景和概念混淆
        ef43ffb32440:created阶段,dom节点还没挂在到document上,因此要获取或者改变节点的值是不行的。
        这里说的获取数据是需要及时显示到界面的数据。没有阐述清楚,多谢您的提问。

      本文标题:Web App开发--Vue生命周期与生命钩子

      本文链接:https://www.haomeiwen.com/subject/ckzetxtx.html