美文网首页
vue的声明周期问题

vue的声明周期问题

作者: 名字是乱打的 | 来源:发表于2020-01-03 11:55 被阅读0次

每个 Vue 实例在被创建之前都要经过一系列的初始化过程.另外vue中数据是双向绑定的,当我们的数据区发生变化,显示信息也会随之变化,因此在生命周期中有一个更新阶段作为可插入项.

vue全部生命周期可参考下图

vue在生命周期中有这些状态,
beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed。Vue
在实例化的过程中,会调用这些生命周期的钩子,给我们提供了执行自定义逻辑的机会。

看是看不懂的...直接代码实验一下好一些

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title>vuejs生命周期</title>
        <script src="js/vuejs-2.5.16.js"></script>
    </head>

    <body>
        <div id="app">
            {{message}}
        </div>
    </body>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                message: 'hello world'
            },
            beforeCreate: function() {
                console.log(this);
                showData('创建vue实例前', this);
            },
            created: function() {
                showData('创建vue实例后', this);
            },
            beforeMount: function() {
                showData('挂载到dom前', this);
            },
            mounted: function() {
                showData('挂载到dom后', this);
            },
            beforeUpdate: function() {
                showData('数据变化更新前', this);
            },
            updated: function() {
                showData('数据变化更新后', this);
            },
            beforeDestroy: function() {
                vm.test = "3333";
                showData('vue实例销毁前', this);
            },
            destroyed: function() {
                showData('vue实例销毁后', this);
            }
        });

        function realDom() {
            console.log('真实dom结构:' + document.getElementById('app').innerHTML);
        }

        function showData(process, obj) {
            console.log(process);
            console.log('data 数据:' + obj.message)
            console.log('挂载的对象:')
            console.log(obj.$el)
            realDom();
            console.log('------------------')
            console.log('------------------')
        }
        //vm.message = "good...";
        vm.$destroy(); 
    </script>

</html>

解读

vue对象初始化过程中,会执行到beforeCreate,created,beforeMount,mounted 这几个钩子的内容,如果我们需要在vue对象的初始化过程中调用一些函数或者对数据做什么处理,我们可以在vue对象中去配置.

  • beforeCreate :数据还没有监听,没有绑定到vue对象实例,同时也没有挂载对象
  • created :数据已经绑定到了对象实例,但是还没有挂载对象
  • beforeMount: 模板已经编译好了,根据数据和模板已经生成了对应的元素对象,将数据对象关联到了对象的
    el属性,el属性是一个HTMLElement对象,也就是这个阶段,vue实例通过原生的createElement等方法来创
    建这个html片段,准备注入到我们vue实例指明的el属性所对应的挂载点
  • mounted:将el的内容挂载到了el,相当于我们在jquery执行了(el).html(el),生成页面上真正的dom,上面我们
    就会发现dom的元素和我们el的元素是一致的。在此之后,我们能够用方法来获取到el元素下的dom对象,并
    进 行各种操作
  • 当我们的data发生改变时,会调用beforeUpdate和updated方
    • beforeUpdate :数据更新到dom之前,我们可以看到$el对象已经修改,但是我们页面上dom的数据还
      没有发生改变
    • updated: dom结构会通过虚拟dom的原则,找到需要更新页面dom结构的最小路径,将改变更新到
      dom上面,完成更新
  • beforeDestroy,destroed :实例的销毁,vue实例还是存在的,只是解绑了事件的监听还有watcher对象数据
    与view的绑定,即数据驱动

相关文章

  • vue的声明周期问题

    每个 Vue 实例在被创建之前都要经过一系列的初始化过程.另外vue中数据是双向绑定的,当我们的数据区发生变化,显...

  • 你真的了解vue生命周期吗

    vue声明周期,在每个声明周期中都干了些什么? 1, vue的生命周期 beforeCreate: 组件实例刚刚被...

  • vue声明周期

    beforeCreate 用于实例初始化之后, 数据响应,event/watcher 事件配置之前被调用 crea...

  • vue 声明周期

    注:所有的生命周期钩子自动绑定this上下文到实例中  不能使用箭头函数定义生命周期(箭头函数绑定的父上下文与Vu...

  • 生命周期

    关于Vue的声明周期 下面讲解以下上面的解析 总的来说,Vue的生命周期分为以下八个阶段 1.beforeCrea...

  • vue声明周期~系列(2)

    vue声明周期八大阶段 created beforeMount mounted beforeUpdate upda...

  • 谈谈vue生命周期

    1.vue的生命周期是什么,先放上官方的图片 vue生命周期就是:在vue实例或者组件里面声明函数,在某一个时候回...

  • vue

    1.什么是vue声明周期 2.vuejs特性 3.vue的特点 vue 组件之间通信?父组件直接使用props 传...

  • vue created 和 mounted 的区别

    你可以看一下vue的声明周期 created mounted 总结就是created的dom还没被vue的dom替...

  • Vue生命周期

    Vue 官网的示意图: 通过代码来测试 Vue 生命周期的执行顺序: 当声明一个 Vue 实例时,会先执行这个实例...

网友评论

      本文标题:vue的声明周期问题

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