vue2生命周期的理解

是的,每个Vue实例在被创建之前都要经过一系列的初始化过程。例如需要配置数据观测(data observe)、编译模版、挂载实例到DOM,然后在数据变化时更新到DOM。在这些过程中,实例就会调用一些生命周期钩子,这就给我们提供了执行自定义逻辑的机会。

所以什么是生命周期钩子???

beforeCreate、created、beforeMout、mouted、beforeUpdate、updated、beforeDestroy、destroyed这些都是钩子(相当于Vue实例在不同生命周期阶段可以回调的函数),在这些钩子里面可以自定义逻辑。当然这些钩子的this是指向调用它的Vue实例。

正如官网的流程图:


图1

代码:

<section id="app">{{info}}</section>

<script>

var myVue=new Vue({

      el:"#app",

      data:{

              info:"good"

        },

        beforeCreate:function(){

              console.log("创建前========")

              console.log(this.info)                                  //undefined

              console.log(this.$el)                                  //undefined

         },

         created:function(){

              console.log("已创建========")

              console.log(this.info)                            //good

              console.log(this.$el)                            //undefined

         },

         beforeMount:function(){

              console.log("mount之前========")

              console.log(this.info)                  //good

              console.log(this.$el)                  //[object HTMLDivElement]      此时的$el是虚拟的DOM的节点,<section>标签里面的文本还没有被替换,还是<section id="app">{{info}}</section>

          },

         mounted:function(){

               console.log("mounted========")

              console.log(this.info)              //good

              console.log(this.$el)              //[object HTMLDivElement]      此时的$el被替换了:<section id="app">good</section>

          },

         beforeUpdate:function(){

              console.log("更新前========");      //执行 myVue.info="very good";触发更新

         },

         updated:function(){

              console.log("更新完成========");  //更新完成  info的值为"very good"

          },

          beforeDestroy:function(){

                console.log("销毁前========")          //执行myVue.$destroy()触发销毁,实例销毁之前调用。在这一步,实例仍然完全可用。

                console.log(this.info)                          //good

                console.log(this.$el)                           //[object HTMLDivElement]      <section id="app">good</section>

        },

        destroyed:function(){

              console.log("已销毁========")         //Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

              console.log(this.info)                          //good

              console.log(this.$el)                          //[object HTMLDivElement]     <section id="app">good</sction>

       }

})

</script>>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容