zoukankan      html  css  js  c++  java
  • Vue 生命周期及运用场景

    从Vue实例创建、运行、销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期。

    生命周期钩子:生命周期事件的别名。

    生命周期函数分类

    • 创建期间的生命周期函数
      • beforCreate:实例在内存中被创建出来。还未初始化 datamethods
      • created: 已经完成了数据观测(data observer),属性和方法的运算, watch/event 事件回调。 在内存中初始化好 datamethods 。此时还未开始编译模板(创建虚拟DOM), $el 属性目前不可见 。
      • beforeMount: 相关的 render 函数首次被调用 。在内存中已经完成了模板编译。此时还未挂载到页面中。
      • mounted:将内存中的编译模板挂载到页面中显示。此时创建阶段完成。
    • 运行期间的生命周期函数
      • beforeUpdate:状态更新之前调用。当内存中实例的 data 数据更新时触发。此时内存中 data 是最新的,但是还未重新渲染DOM节点。
      • updated:实例更新完毕之后执行。此时内存中的 最新data 已经重新渲染到DOM节点。
    • 销毁期间的生命周期函数
      • beforeDestroy:实例销毁之前调用。执行该函数时已经从运行阶段进入销毁阶段。此时实例完全可用(如:data、methods、filter...)。
      • destroyed:实例销毁之后调用。调用后,Vue实例指示的所有东西都会解绑,所有的事件监听都会解绑,所有的子实例也会被消除。

    生命周期图示

    生命周期运用场景

    • created:进行ajax请求异步数据的获取、初始化数据
    • mounted:挂载元素内dom节点的获取
    • nextTick:针对单一事件更新数据后立即操作dom
    • updated:任何数据的更新,如果要做统一的业务逻辑处理
    • watch:监听具体数据变化,并做相应的处理
    <body>
    
        <div id="app">
            <p id="testMsg">{{ msg }}</p>
            <button @click="msg = '数据更新啦!'">msg 数据更新</button>
            <button @click="$destroy()">实例销毁</button>
        </div>
        
        <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    msg: 'Hello Vue!'
                },
                methods: {
                    show () {
                        console.log('调用 show() 函数')
                    }
                },
                beforeCreate () {
                    // 实例被创建前执行
                    // 执行函数时 data 和 methods 还没有被初始化
                    // 运用场景:
                    console.log('beforeCreated 调用')
                    console.log('this.msg',this.msg)        // 打印 undefined
                    this.show()                             // 报错 show() is not undefined
                },
                created () {
                    // 实例被创建之后执行
                    // 执行函数时data 和 methods 初始化完成。但是模板还未开始编辑
                    // 运用场景:1) Ajax 异步数据请求 2) 初始化操作
                    console.log('created 调用')
                    console.log('this.msg',this.msg)       // 打印 Hello Vue!
                    this.show()                             // 调用 show() 函数
                },
                beforeMount () {
                    // 实例挂载前执行
                    // 此时模板已经编辑完成到内存中。但是还未渲染到 DOM,固页面未展示
                    // 运用场景:
                    console.log('beforeMount 调用')
                    console.log('内存中变量',this.msg) // 打印 Hello Vue!
                    console.log('页面上的变量',document.getElementById('testMsg').innerText) // 打印 {{ msg }}
                },
                mounted () {
                    // 实例挂载后执行
                    // 此时已经渲染了DOM,可以调用插件操作 DOM
                    // 运用场景:挂载元素内dom节点的获取。可以配合$.nextTick 使用进行单一事件对数据的更新后更新dom
                    console.log('mounted 调用')
                    console.log('内存中变量',this.msg) // 打印 Hello Vue!
                    console.log('页面上的变量',document.getElementById('testMsg').innerText) // 打印 Hello Vue!
                },
                beforeUpdate () {
                    // 数据更新前执行
                    // data 数据有更新时,内存中重新编译了最新模板字符串,但还未重新渲染DOM
                    // 运用场景:
                    console.log('beforeUpdate 调用')
                    console.log('内存中变量',this.msg) // 打印 数据更新啦!
                    console.log('页面上的变量',document.getElementById('testMsg').innerText) // 打印 Hello Vue!
                },
                updated () {
                    // 数据更新后执行
                    // 已经重新渲染 DOM 
                    // 运用场景:对数据更新作统一逻辑业务处理
                    console.log('updated 调用')
                    console.log('内存中变量',this.msg) // 打印 数据更新啦!
                    console.log('页面上的变量',document.getElementById('testMsg').innerText) // 打印 数据更新啦!
                },
                beforeDestroy () {
                    // 实例销毁前调用:($destroy方法被调用的时候就会执行)
                    // 运用场景:善后:清除计时器、清除非指令绑定的事件等等
                    console.log('beforeDestroy 调用')
                    console.log('this.msg',this.msg)
                },
                destroyed () {
                    // 实例销毁后执行
                    // 实例销毁: 组件的数据绑定、监听...都去掉了,只剩下dom空壳。data,methods 还在,但是已经无法对其进行操作了
                    // 运用场景:这里也可以善后
                    console.log('destroyed 调用')
                    console.log('this.msg',this.msg) // 打印最后的 msg 的值
                    this.msg = 'new value' // data 数据不会再改变
                    this.show() // 调用 show() 方法,单若有数据操作等是不生效的
                }
            })
        </script>
    </body>
    
  • 相关阅读:
    swagger本地环境搭建
    上传图片报错
    接口自动化测试---环境搭建
    IDEA 运行程序提交hdfs时,报错
    hadoop2.60集群搭建
    查找排除当前最大、最小salary之后的员工的平均工资avg_salary。
    按照salary的累计和running_total,其中running_total为前两个员工的salary累计和
    CSS补充
    BFC(块级格式化上下文)
    CSS精灵技术
  • 原文地址:https://www.cnblogs.com/ting-hui/p/13853124.html
Copyright © 2011-2022 走看看