zoukankan      html  css  js  c++  java
  • Vue js 的生命周期详解

    Vue 实例的生命周期

    Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列 过程,我们称这是 Vue 的生命周期。通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期。

    在Vue的整个生命周期中,它提供了一些生命周期钩子,给了我们执行自定义逻辑的机会。

    它可以总共分为8个阶段:

    beforeCreate(创建前),
    
    created(创建后),
    
    beforeMount(载入前),
    
    mounted(载入后),
    
    beforeUpdate(更新前),
    
    updated(更新后),
    
    beforeDestroy(销毁前),
    
    destroyed(销毁后)

    接下来我们用例子来看看生命周期钩子是怎么用的:

    HTML结构:

    <div id="app">
        <p>{{ message }}</p>
        <input type="text" v-model="message">
        <button v-on:click="change">改变数据</button>
    </div>

    我们对 input 和 p 绑定了data 对象的 message 数据,Vue 实例构建如下:

     1 var app = new Vue({          
     2     el: "#app",          
     3     data: {
     4         message: "hello world"        
     5     },         
     6     beforeCreate: function() {          
     7         console.log("创建前")            
     8         console.log(this.message)            
     9         console.log(this.$el)          
    10     },         
    11     created: function() {
    12         console.log("创建之后");            
    13         console.log(this.message)            
    14         console.log(this.$el)          
    15     },         
    16     beforeMount: function() {            
    17         console.log("mount之前")            
    18         console.log(this.message)            
    19         console.log(this.$el)          
    20     },          
    21     mounted: function() {            
    22         console.log("mount之后")            
    23         console.log(this.message)            
    24         console.log(this.$el)          
    25     },          
    26     beforeUpdate: function() {            
    27         console.log("更新前");            
    28         console.log(this.message)            
    29         console.log(this.$el)          
    30     },          
    31     updated: function() {            
    32         console.log("更新完成");            
    33         console.log(this.message);            
    34         console.log(this.$el)          
    35     },          
    36     beforeDestroy: function() {            
    37         console.log("销毁前");            
    38         console.log(this.message)            
    39         console.log(this.$el)            
    40         console.log(this.$el)          
    41     },          
    42     destroyed: function() {           
    43         console.log("已销毁");          
    44         console.log(this.message)          
    45         console.log(this.$el)          
    46     }   
    47  });  

    然后在 methods 里面添加一个change方法:

    methods: {
        change :function() {
            this.message = "vue.js"
        } 
    }

    点击按钮之后出现的是:

     

    这就是vue的生命周期,很简单吧。

    在实例中分别在每个生命周期钩子中 console.log('钩子名称',this.message) 我们发现,第一次页面加载时触发了 beforeCreate, created, beforeMount, mounted 这几个钩子,data 数据在 created 中可获取到。再去 console.log('mounted: ', document.getElementsByTagName('p')[0]) ,DOM 渲染在 mounted 中已经完成。

    我们再试着去点击按钮更改 message 和 input 输入框中的内容,可以看到数据同步发生改变,这就是数据绑定的效果,在更新数据时触发 beforeUpdate 和 updated 钩子,且在 beforeUpdate 触发时,数据已更新完毕。

    而 destroy 仅在调用app.$destroy();时触发,对 vue 实例进行销毁。销毁完成后,我们再重新改变 number 的值,vue 不再对此动作进行响应了。但是原先生成的dom元素还存在,可以这么理解,执行了destroy操作,后续就不再受vue控制了。

    生命周期小结

    生命周期钩子的一些使用方法:

    beforecreate : 可以在这加个loading事件,在加载实例时触发 
    created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
    mounted : 挂载元素,获取到DOM节点
    updated : 如果对数据统一处理,在这里写上相应函数
    beforeDestroy : 可以做一个确认停止事件的确认框
    nextTick : 更新数据后立即操作dom

  • 相关阅读:
    TDSCDMA手机(WM系统)信号的采集?
    vc2008 + libpq + postgresql 8.4 配置
    code complete 2阅读笔记(第二章)
    Python 学习笔记(一)语句,变量,函数
    CS通用模型设计,socket,tcp实现()
    VS2005,VS2008编辑器设置
    设计模式之个人理解单例模式
    请教:C#网络编程相关的知识,建立socket服务器时向客户端连接,就建立不了了?
    服务器开发
    年终总结
  • 原文地址:https://www.cnblogs.com/shiweida/p/7802138.html
Copyright © 2011-2022 走看看