vue生命周期

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>vue生命周期学习</title>
  <script src="https://cdn.bootcss.com/vue/2.4.2/vue.js"></script>
</head>
<body>
  <div id="app">
    <h1>{{message + '这是在outer HTML中的'}}</h1>
  </div>
</body>
<script>
  var vm = new Vue({
    el: '#app',
    template: "<h1>{{message +'这是在template中的'}}</h1>",
    // render: function(createElement) {
    //     return createElement('h1', 'this is createElement')
    // },
    data: {
      message: 'Vue的生命周期'
    },
    beforeCreate: function() {
      console.group('------beforeCreate创建前状态------');
      console.log("%c%s", "color:red" , "el     : " + this.$el); //undefined
      console.log("%c%s", "color:red","data   : " + this.$data); //undefined 
      console.log("%c%s", "color:red","message: " + this.message) 
    },
    created: function() {
      console.group('------created创建完毕状态------');
      console.log("%c%s", "color:red","el     : " + this.$el); //undefined
      console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化 
      console.log("%c%s", "color:red","message: " + this.message); //已被初始化
      
    //   this.$mount({el: '#app'}) //这个el参数就是挂在的dom接点
    },
    beforeMount: function() {
      console.group('------beforeMount挂载前状态------');
      console.log("%c%s", "color:red","el     : " + (this.$el)); //已被初始化
      console.log(this.$el);
      console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化  
      console.log("%c%s", "color:red","message: " + this.message); //已被初始化  
    },
    mounted: function() {
      console.group('------mounted 挂载结束状态------');
      console.log("%c%s", "color:red","el     : " + this.$el); //已被初始化
      console.log(this.$el);    
      console.log("%c%s", "color:red","data   : " + this.$data); //已被初始化
      console.log("%c%s", "color:red","message: " + this.message); //已被初始化 
      this.mes()
    },
    beforeUpdate: function () {
      console.group('beforeUpdate 更新前状态===============》');
      console.log("%c%s", "color:red","el     : " + this.$el);
      console.log(this.$el);   
      console.log("%c%s", "color:red","data   : " + this.$data); 
      console.log("%c%s", "color:red","message: " + this.message); 
      this.message = 'vue lifecycle'
    },
    updated: function () {
      console.group('updated 更新完成状态===============》');
      console.log("%c%s", "color:red","el     : " + this.$el);
      console.log(this.$el); 
      console.log("%c%s", "color:red","data   : " + this.$data); 
      console.log("%c%s", "color:red","message: " + this.message); 
    },
    beforeDestroy: function () {
      console.group('beforeDestroy 销毁前状态===============》');
      console.log("%c%s", "color:red","el     : " + this.$el);
      console.log(this.$el);    
      console.log("%c%s", "color:red","data   : " + this.$data); 
      console.log("%c%s", "color:red","message: " + this.message); 
    },
    destroyed: function () {
      console.group('destroyed 销毁完成状态===============》');
      console.log("%c%s", "color:red","el     : " + this.$el);
      console.log(this.$el);  
      console.log("%c%s", "color:red","data   : " + this.$data); 
      console.log("%c%s", "color:red","message: " + this.message)
    },
    methods:{
        mes(){
            console.log('mes',this.message)
            this.message = 'vue life'
        }
    }
  })
</script>
</html>

在这里插入图片描述

  • Vue 生命周期
    从创建到销毁发生的一系列状态叫做什么周期,在这个过程中vue会提供状态函数给我们进行,该状态的操作,这个函数叫做钩子函数/生命周期函数/生命周期钩子

  • 过程
    1.new实例化—beforeCreate
    Vue 实例初始化,读取所有的生命周期函数,并没有执行,不会调用,beforeCreate函数输出的所有方法属性元素都是未定义状态
    2.beforeCreate—created
    created函数截至,vue实例化创建完成,可读取属性,计算属性,添加监听 set get方法,读取watch方法,也可调用部分method方法(此时还是没有el选项,没有挂在Dom元素上,视图无变化,只是data数据变化)
    在这里插入图片描述
    3.created—beforeMount
    判断是否有el配置,或者是被调用了 m o u n t ( ) 都 会 走 下 一 步 判 断 有 没 有 e l 或 者 是 mount() 都会走下一步 判断有没有el或者是 mount()elmount()作用的dom结构,如果没有截止到created
    注意:
    此时输出的$el只是虚拟dom,并没有直接渲染到页面上,此时是没有dom结构的***

     (1).如果vue实例对象中有render函数或者template参数选项,会首先执行render函数渲染,如没有render函数则将template作为模板编译成render函数。
     (2).如果没有template选项,则将外部HTML作为模板编译。
     (3).可以看到template中的模板优先级要高于outer HTML的优先级
       综合排名优先级:render函数选项 > template选项 > outer HTML.
    

    4.beforeMount—mounted
    如果有dom结构,给vue实例对象添加 e l 成 员 , 读 取 d o m 结 构 渲 染 v u e 指 令 , 并 且 替 换 掉 挂 在 的 D O M 元 素 , 也 就 是 挂 载 的 过 程 , 可 以 看 见 下 面 m e s s a g e 渲 染 d o m 完 成 这 里 可 以 操 作 d o m 或 者 r e f 操 作 d o m , 用 法 r e f = &quot; i d &quot; , t h i s . el成员,读取dom结构 渲染vue指令 {{}},并且替换掉挂在的DOM元素,也就是挂载的过程,可以看见下面{{message}}渲染dom完成 这里可以操作dom或者ref操作dom,用法ref= &quot;id&quot; ,this. eldomvueDOMmessagedomdomrefdomref="id",this.ref,这里的id为唯一值,手写id会覆盖,但是用v-for 遍历ref,id成了一个数组,不会覆盖。
    之后一般执行交互操作。
    在这里插入图片描述

    5.beforeUpdate钩子函数和updated钩子函数间的生命周期
    在这里插入图片描述
    发现触发了组件的更新:
    可以看到mounted中调用mes方法,实际mounted、beforeUpdate、updated这三个周期输出的$el都是一样的message,这个因为data changed时是三个函数一整个observe同步过程
    在beforeUpdate时还可以反悔进行data changed操作
    在这里插入图片描述
    6.beforeDestroy和destroyed钩子函数间的生命周期
    beforeDestroy钩子函数在实例销毁之前调用。在这一步,实例仍然完全可用。
    destroyed钩子函数在Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值