vue笔记-07(vue实例的生命周期)

  • 什么是生命周期:从VUE实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期
    • 生命周期钩子:就是生命周期事件的别名而已
    • 生命周期钩子=生命周期函数=生命周期事件
    • 主要的生命周期函数分类:
      • 创建期间的生命周期函数:
        1)beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好data和methods属性
        2)created:实例已经在内存中创建好,此时data和methods也已经创建好,此时还没有开始编译模板
        3)beforeMount:此时已经在内存中完成了模板的编译,但是还没有渲染到页面中
        4)mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示,到此,实例就已经被完全的创建好了
      • 运行期间的生命周期函数:
        1)beforeUpdate:状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为此时还没有开始重新渲染DOM节点
        2)updated:实例更新完毕之后调用此函数,此时data中的状态值和界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了
      • 销毁期间的生命周期函数:
        1)beforeDestory:实例销毁之前调用,在这一步,实例仍然完全可用,还没有执行真正的销毁过程
        2)destroyed:Vue实例销毁后调用,调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
      • 生命周期流程图


        lifecycle.png
      • 生命周期流程函数演示代码
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>生命周期函数演示</title>
          <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
      </head>
      <body>
      <div id="app">
          <div id="msg">{{ msg }}</div>
          <input type="button" value="change" @click="changeMsg()">
      </div>
      
      <script>
          var vm = new Vue({
              el:"#app",
              data: {
                  msg : 'hello'
              },
              methods:{
                  sayHi(){
                      console.log("hi, vue!!")
                  },
                  changeMsg(){
                      this.msg = 'bye'
                  }
              },
              beforeCreate: function(){ //data和methods还没有构建初始化好
                  // console.log(this.msg) //异常无法正常调用
                  // this.sayHi() // 异常 无法正常调用
              },
              created(){ //vue 在内存中创建好了
                  // console.log(this.msg) //可以正常调用
                  // this.sayHi() // 可以正常调用
              },
              beforeMount(){//编译好模板前
                  // console.log(document.getElementById("msg").innerText) //无法正常获取,还没有编译模板
              },
              mounted(){//已经编译好模板,vue实例就已经被完全的创建好了
                  // console.log(document.getElementById("msg").innerText) //能够正常显示,
              },
              beforeUpdate(){ //状态更新之前执行此函数
                  // console.log(this.msg) //点修button调用changeMsg方法后,vm对象中的msg为新数据
                  // console.log(document.getElementById("msg").innerText) ////点修button调用changeMsg方法后,页面上显示数据还是老数据
              },
              updated(){//状态更新之后执行此函数
                  // console.log(this.msg) //点修button调用changeMsg方法后,vm对象中的msg为新数据
                  // console.log(document.getElementById("msg").innerText) ////点修button调用changeMsg方法后,页面上显示数据改为新数据
              },
              beforeDestory(){ //实例销毁前,实例中的所有数据和方法依然是可用的状态
                  //不好演示
              },
              destroyed(){ //实例完全被销毁后调用,实例中的所有数据和方法已经是不可用的状态
                  //不好演示
              }
      
          })
      </script>
      </body>
      </html>
      
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容