1. 生命周期(重要)

1.1 初步认识生命周期

  • 别名:生命周期回调函数、生命周期函数、生命周期钩子。
  • 生命周期是什么?Vue在关键时刻帮我们调用的一些特殊名称的函数。
  • 生命周期函数的名字不可更改,但函数内部的具体内容由程序员自行编写
  • 生命周期函数中的this指向也是vm 或 组件实例对象。

1.2 生命周期流程(8个)

1.初始化

​ 1.beforeCreate()

​ 2.created()

2.挂载(页面渲染)

​ 1.beforeMount()

​ 2.mounted()

3.更新

​ 1.beforeUpdate()

​ 2.updated()

4.销毁

​ 1.beforeDestory()

​ 2.destoryed()

1.3 生命周期详细流程图

在这里插入图片描述

1.4 常用的生命周期钩子:

beforeCreate():可以配置全局事件总线,后面会讲到先提一嘴

mounted(): 可以在此阶段发送ajax请求, 启动定时器、绑定自定义事件、订阅消息等异步任务【初始化操作】

beforeDestroy(): 在此阶段做收尾工作, 如: 清除定时器、解绑自定义事件、取消订阅消息等【首尾工作】

1.4.1 关于销毁

  • 销毁后借助Vue开发者工具看不到任何信息
  • 销毁后自定义事件会失效,但原生DOM事件依然有效
  • 一般不会在beforeDestroy操作数据,因为即使操作数据,也不会再触发更新流程了。

1.4.2 关于父子组件的生命周期 

1.加载渲染的过程

父beforeCreate ==> 父created ==> 父beforeMount ==> 子beforeCreate ==> 子created ==> 子beforeMount ==> 子mounted ==> 父mounted

2.更新的过程

父beforeUpdate ==> 子beforeUpdate ==> 子updated ==> 父updated

3.销毁过程

父beforeDestroy ==> 子beforeDestroy ==> 子destroyed ==> 父destroyed

1.5小案例

 <div id="root">
        <!-- 让h3透明度产生过渡的效果 -->
        <h3 :style="{opacity:opacity}">欢迎学习Vue!</h3>
        <button @click="des">点击我销毁</button>
    </div>
    <script>
        Vue.config.productionTip = false
        let vm = new Vue({
            el: '#root',
            data: {
                opacity: 1
            },
            methods: {  
                des(){
                    // 触发此函数必定调用,beforeDestroy(),destroyed()
                    this.$destroy()
                }
            },
            mounted() { //挂载
                /*
                		- 完成模板解析后并且将初始的真实的DOM元素挂载到页面后,才执行的函数
                			只会执行一次
                		- this指向Vue
                		- 开发中常用的方法,当我们想要读取某个属性但是读不到,就可以
                		  将该属性绑定到共同能够访问到的元素上,例如下面定时器的例子
                */
                this.timer = setInterval(() => {
                    this.opacity -= 0.01
                    if (this.opacity <= 0)
                        this.opacity = 1
                }, 10);
            },
            beforeDestroy() {
                console.log("beforeDestroy - 清除定时器");
                clearInterval(this.timer)
            },
            destroyed() {
                console.log("destroyed - 销毁完毕")
            },
        })
    </script>

1.6 代码举例说明生命周期钩子

  <div id="root">
        <h3>n的值为:{{n}}</h3>
        <button @click="add">点击我n 1</button>
        <button @click="remove">点击销毁vm</button>
    </div>
    <script>
        Vue.config.productionTip = false
        let vm = new Vue({
            el: '#root',
            data: {
                n:1
            },
            methods: {
                add(){
                    this.n  
                },
                remove(){
                    this.$destroy()
                }
            },
            beforeCreate() {
                /* 
                    此时初始化生命周期,事件等,数据代理还未开始
                    vm无法访问到data中的数据,methods中的方法
                */
                console.log("beforeCreate");
                //console.log(this.n);  //undefined
                // console.log(this.add()); // this.add is not a function
                // debugger
            },
            created() {
                /* 
                    已经完成了初始化的数据监视和数据代理
                    vm可以访问到data中的数据和methods的方法
                */
                console.log("created");
                // console.log(this.n);  // 1
                // console.log(this.add());  // undefined
                // debugger
            },
            beforeMount() {
                /*
                    挂载之前,也就是图中的判断框里执行的,此阶段是Vue
                    在解析模板并且生成虚拟DOM存储在内存当中,页面还不能
                    看到解析后的样子
                 */
                 console.log("beforeMount");
                //  debugger
            },
            mounted() {
                /* 
                    完成模板解析后并且将初始的真实的DOM元素挂载到页面后,才执行的函数
                    一般在此:开启一些定时器、发送网络请求、订阅消息、
                    绑定自定义事件等等初始化
                 */
                console.log("mounted");
                // debugger
            },
            beforeUpdate() {
                /* 
                    当数据发生更新后,此时数据已经更新完成,但是页面
                    还是未更新的。
                    也就是面试所问的:页面和尚未和数据保持同步的阶段
                 */
                console.log("beforeUpdate");
            },
            updated() {
                /* 
                    在这之前会进行新旧虚拟DOM比较,最终完成页面的更新
                    此阶段就是页面和数据保持同步
                 */
                 console.log("updated");
            },
            beforeDestroy() {
                /* 
                    当我们调用vm.$destroy时,才会执行下面两个函数,
                    马上要执行销毁阶段,一般在这个阶段做一些收尾操作
                    比如:关掉定时器,取消订阅,解绑自定义事件
                 */
                console.log("beforeDestroy");
            },
            destroyed() {
                /*
                    所有的指令,所有的自定义事件监听器都没了(只留下原生的dom的事件)
                 */
                console.log("destroyed");
            },
        })
    </script>

总结

以上就是今天要讲的内容,本文介绍了生命周期的相关知识,希望对大家有所帮助!

Vue的生命周期一起来看看的更多相关文章

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. vue使用动画实现滚动表格效果

    这篇文章主要为大家详细介绍了vue使用动画实现滚动表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. 关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧

  5. Vue子组件props从父组件接收数据并存入data

    这篇文章主要介绍了Vue子组件props从父组件接收数据并存入data的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Vue h函数的使用详解

    本文主要介绍了Vue h函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. VUE响应式原理的实现详解

    这篇文章主要为大家详细介绍了VUE响应式原理的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. iview+vue实现导入EXCEL预览功能

    这篇文章主要为大家详细介绍了iview+vue实现导入EXCEL预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部