Vue生命周期

一、Vue生命周期函数

二、创建阶段

1.beforeCreate

生命周期函数中的第一个函数,这个函数他在执行Vue实现的,仅仅完成了自身事件的绑定和生命周期函数的初始工作,这时候实例里还没有el,data,methods这些相关属性

<script>
    const vm = new Vue({
      el:'#app',
      data:{
        msg:'恕瑞玛'
      },
      methods:{
      },
      beforeCreate(){
        console.log(this.msg);
      }
 </script>

可以看到控制台并未打印msg的内容。

2.created

生命周期函数中的第二个函数,这个函数在执行的时候,Vue实例已经初始化了data和methods中的属性

<script>
    const vm = new Vue({
      el:'#app',
      data:{
        msg:'恕瑞玛'
      },
      methods:{
        show(){
          alert('弹窗来啦');
        }
      },
      beforeCreate(){
        console.log(this.msg);
      },
      created(){
        console.log(this.msg);
        this.show();
      }
    })
  </script>

这时候可以看到控制台输出了msg的内容,说明Vue实例的属性已经初始化了,而且在此之前,msg还在处于未初始化的{{msg}}形式

三、挂载阶段

3.beforeMount

生命周期中的第三个函数,这个函数在执行Vue将el中指定范围作为模板翻译

开始挂载编译生成的HTML到对应位置时触发的钩子函数。但此时还未将编译出的HTML渲染到页面上

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div id="app">
    <h1 id="h1">{{msg}}</h1>
  </div>

</body>
</html>

  <script src="../lib/vue.js"></script>
  <script>
    const vm = new Vue({
      el:'#app',
      data:{
        msg:'恕瑞玛'
      },
      methods:{
        show(){
          alert('弹窗来啦');
        }
      },
     beforeCreate(){
        console.log(this.msg);
      },
      created(){
        console.log(this.msg);
        this.show();
      },
      beforeMount(){
        console.log('beforeMount'+document.getElementById('h1').innerText);

      }
    })
  </script>

控制台打印 结果如下

4.mounted

生命周期中的第四个函数,这个函数在执行过程中,已经将数据渲染到界面中,并且已经更新页面。将编译好的HTML挂载到页面完成后执行的钩子函数,此时可以发送ajax请求获取数据的操作进行数据初始化。但mounted在整个实例声明内只执行一次

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div id="app">
    <h1 id="h1">{{msg}}</h1>
  </div>

</body>
</html>

  <script src="../lib/vue.js"></script>
  <script>
    const vm = new Vue({
      el:'#app',
      data:{
        msg:'恕瑞玛'
      },
      methods:{
        show(){
          alert('弹窗来啦');
        }
      },
      beforeCreate(){
        console.log(this.msg);
      },
      created(){
        console.log(this.msg);
        this.show();
      },
      beforeMount(){
        console.log('beforeMount'+document.getElementById('h1').innerText);

      },
      mounted(){
        console.log('mounted'+document.getElementById('h1').innerText);
      }
    })
  </script>

控制台打印

四、运行阶段

5.beforeUpdate

生命周期中的第五个函数,这个函数是data中的数据发生变化时候进行的,这个事件执行仅仅是Vue实例中data数据变化页面显示的仍然是原始数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div id="app">
    <h1 id="h1">{{msg}}</h1>
    <input type="text" v-model="msg">
  </div>

</body>
</html>

  <script src="../lib/vue.js"></script>
  <script>
    const vm = new Vue({
      el:'#app',
      data:{
        msg:'恕瑞玛'
      },
      methods:{
        show(){
          alert('弹窗来啦');
        }
      },
      beforeCreate(){
        console.log(this.msg);
      },
      created(){
        console.log(this.msg);
        this.show();
      },
      beforeMount(){
        console.log('beforeMount'+document.getElementById('h1').innerText);

      },
      mounted(){
        console.log('mounted'+document.getElementById('h1').innerText);
      },
      //运行阶段
      beforeUpdate(){
        console.log("beforeUpdate" + this.msg);
        console.log("beforeUpdate" + document.getElementById('h1').innerText);
      }
    })
  </script>

可以看到,当改变数据的时候,函数中得到的标签中的数据仍然是未更新过的原始数据

6.updated

生命周期中第六个函数,这个函数是data中数据发生变化时候执行,页面中的数据已经和data中的数据保持一致,是更新过的新数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div id="app">
    <h1 id="h1">{{msg}}</h1>
    <input type="text" v-model="msg">
  </div>

</body>
</html>

  <script src="../lib/vue.js"></script>
  <script>
    const vm = new Vue({
      el:'#app',
      data:{
        msg:'恕瑞玛'
      },
      methods:{
        show(){
          alert('弹窗来啦');
        }
      },
      beforeCreate(){
        console.log(this.msg);
      },
      created(){
        console.log(this.msg);
        this.show();
      },
      beforeMount(){
        console.log('beforeMount'+document.getElementById('h1').innerText);

      },
      mounted(){
        console.log('mounted'+document.getElementById('h1').innerText);
      },
      //运行阶段
      beforeUpdate(){
        console.log("beforeUpdate" + this.msg);
        console.log("beforeUpdate" + document.getElementById('h1').innerText);
      },
      updated(){
        console.log('updated' + this.msg);
        console.log('updated' + document.getElementById('h1').innerText)
      }
    })
  </script>

效果如下

五、销毁阶段

7.beforeDestory

生命周期钩子函数中的第七个函数。当执行beforeDestory钩子函数时,Vue实例就已经从运行阶段进入销毁阶段,此时,组建中所有data、methods以及过滤器,指令等都处于可用状态,此时还未真正执行销毁过程

8.destroyed

生命周期函数中的第八个函数,该函数执行的时候,Vue实例彻底被销毁

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div id="app">
    <h1 id="h1">{{msg}}</h1>
    <input type="text" v-model="msg">
  </div>

</body>
</html>

  <script src="../lib/vue.js"></script>
  <script>
    const vm = new Vue({
      el:'#app',
      data:{
        msg:'恕瑞玛'
      },
      methods:{
        show(){
          alert('弹窗来啦');
        },
        display(){
          console.log('哈哈啊哈');
        }
      },
      beforeCreate(){
        console.log(this.msg);
      },
      created(){
        console.log(this.msg);
        this.show();
      },
      beforeMount(){
        console.log('beforeMount'+document.getElementById('h1').innerText);

      },
      mounted(){
        console.log('mounted'+document.getElementById('h1').innerText);
      },
      //运行阶段
      beforeUpdate(){
        console.log("beforeUpdate" + this.msg);
        console.log("beforeUpdate" + document.getElementById('h1').innerText);
      },
      updated(){
        console.log('updated' + this.msg);
        console.log('updated' + document.getElementById('h1').innerText)
      },
      beforeDestroy(){
        console.log('执行了销毁前beforeDestroy');
        this.display();
      },
      destroyed(){
        console.log('执行了销毁后destroyed');
        this.display();
      }
    })
  </script>

控制台输出如下,当我们执行完vm.$destroy()销毁函数后,beforeDestory 和 destroyed 都被执行,然后再输入框里输入内容,<h1>{{msg}}<h1> 不再会同步展示,因为Vue实例已经被彻底销毁了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值