IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue (五) --------- Vue.js 对象生命周期 -> 正文阅读

[JavaScript知识库]Vue (五) --------- Vue.js 对象生命周期


一、生命周期简介

生命周期是指 Vue.js 对象从创建到销毁的全过程。

生命周期 1:创建阶段

在这里插入图片描述

1.new Vue() :执行代码 var vm = new Vue({}), 表示创建一个 Vue 对象。

2.Init (Events&Lifecycle) :

执行完以上代码后步入到对象初始化的前期阶段,表示通过以上代码我们创建了 Vue.js 对象,此时,在新建的对象身上,具备了一些生命周期相关的函数 (生命周期的钩子函数) 和默认的事件,但是其他的相关的组件还没有被创建 (data、methods、filter 等等都没有被创建出来)。

执行 Init(Events&Lifecycle)之后,钩子函数都被创建出来,马上调用生命周期函数 beforeCreate,在该函数执行的时候,我们最常使用的组 data 和 methods 等,都还没有被创建出来。

3.Init (injections&reactivity)

该阶段是对象初始化的后期阶段。执行 Init(injections&reactivity) 的方式是调用生命周期函数 created。在该函数中,data 和 methods 都已经被初始化好了。

也就是说,如果要使用 methods 中的方法,或者是操作 data 中的数据,最早可以在 created 方法中来进行操作。

在这里插入图片描述
4.Init 对象初始化阶段执行完毕后,通过对元素以及模板进行判断,系统开始编辑模板,将 Vue 代码中的指令进行执行,然后在内存中生成一个编辑好的模板字符串,最终将该模板字符串渲染为内存中的 DOM。

但是此时集锦只是在内存中渲染好了模板,并没有将模板挂载到页面中去。该阶段执行完毕后,执行 beforeMount 方法。

5.Create vm

该阶段是将内存中编译好的模板,替换到浏览器的页面中。该阶段执行完毕后,执行 mounted 方法。只要执行完了 mounted 方法,就表示整个 Vue 对象已经初始化完毕了,此时正式脱离创建阶段进入到运行阶段。如果要通过某些插件操作页面上的 DOM 节点,最早是要在 mounted 中进行。

生命周期 2:对象运行阶段

在这里插入图片描述
6.Virtual DOM

该阶段会根据 data 中的最新数据,重新渲染出一份最新的 DOM 树,当最新的内存 DOM 树被更新了之后,会把最新的 DOM树重新渲染到页面中去,这时候就完成了使用模型 Model 去渲染视图 View 的过程。

该阶段的执行会使用到两个函数 beforeUpdate 和 updated,这两个函数会根据 data 数据的变化,可重复的执行多次。

当 beforeUpdate 方法执行的时候,页面中的显示还是以前的数据,但是 data 中保存的是更新后的新数据,页面此时还没有和最新的数据蛙保持同步。

updated 函数执行的时候,页面和 data 数据已经保持同步了,都是最新的数据了。

生命周期 3:对象销毁阶段

在这里插入图片描述
7.Teardown (拆卸),该阶段为对象销毁的阶段,当对象实例运行完毕后,如果达到了对象销毁的条件,执行 beforeDestroy 函数,该函数的执行正式标志着对象从运行阶段进入到了销毁的阶段。

当 beforDestroy 函数执行的时候,对象身上所有的组件 data、methods、filter、directive 等组件都还处于可用状态(因为对象只是步入到了销毁的阶段,还没有销毁),该函数执行完毕后,对象正式销毁。

8.Destroyed

该阶段为对象销毁后的阶段。该阶段会执行 destroyed 函数,当该函数执行的时候,对象已经被销毁了,里面的 data、methods 等相应的组件也不能使用了。

以上生命周期中使用的所有的函数,就是 Vue.js 生命周期中最重要的钩子函数。

二、钩子函数解析

vue 生命周期中钩子函数有 :

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 引入 vue.js 框架-->
    <script src="./lib/vue-2.4.0.js"></script>
    <style>
    </style>
</head>

<body>

    <div id="app">
        <!-- 
            测试对象创建相关的钩子函数
        -->
        
        <span id="msg">{{str1}}</span>
        <br>
        <br>
        
        <!-- 
            测试对象运行相关的钩子函数
         -->

         请输入信息 : <input type="text" v-model="str1">
    </div>

    <script>

        var vm = new Vue({
            el: "#app",
            data: {
                "str1": "aaa"
            },
            methods: {
                showInfo() {
                    alert(this.str1+"bbb");
                }
            },
            
            // 这是我们 Vue.js 对象生命周期第一个钩子函数, 表示实例在完全被创建出来之前, 会执行该函数
            // 注意: beforeCreate 函数执行的时候, data 和 methods 中的数据都还没有被初始化出来
            beforeCreate() {
                 //结果 : undefined, 表示 data 中的数据没有被初始化
                 alert(this.str1);
                 //结果 : 没有执行该函数, 表示 methods 中的函数没有被初始化
                 this.showInfo();
            },

            // 在 created 中, data 和 methods 等组件都已经被初始化完毕了(注意 : 此时还没有编辑模板)
            // 如果我们需要使用 data 中的数据, 或者使用 methods 中的方法, 最早只能在 created 方法中进行操作
            created() {
                // aaa : 说明在此方法中已经能够使用 data 的数据了
                alert(this.str1);

                // aaabbb : 说明此方法中已经能够使用 methods 中的方法
                this.showInfo();
            }, 
             
            // 该函数的执行, 表示模板已经在内存中编辑成功了, 但是还没有将模板渲染到页面中
            beforeMount() {
                var msg = document.getElementById("msg").innerHTML;
                // 弹出 {{str1}}, 证明此时还没有将模板渲染到页面中
                // 在 beforeMount 执行时, 页面中的元素还没有被真正替换成我们所需要的值, 只是在内存中写了一些模板字符串
                alert(msg);
            },

            // 该函数表示内存中的模板, 已经真实挂载到了页面中, 用户已经可以看到渲染好的页面了
            // mounted 函数是 Vue.js 对象创建期间的最后一个生命周期函数, 当我们执行完 mounted 方法之后表示实例已经被完全创建好了
            mounted() {
                var msg = document.getElementById("msg").innerHTML;
                // aaa : 证明内存中的模板已经同步到了页面中
                alert(msg);
            },

            // 在更新数据之前, 执行 beforeUpdate 函数
            // 执行该函数的时候, 页面中显示的还是上一次的旧数据, 此时 data 中的数据还是最新的, 页面中尚未和最新的data中的数据同步
            beforeUpdate() {
                var msg = document.getElementById("msg").innerHTML;
                // 每一次展现的数据都是上一次的旧数据
                alert(msg);
            },
            
            //执行该函数的时候, 页面和data数据已经保持同步了, 都是最新的数据了
            updated() {
                var msg = document.getElementById("msg").innerHTML;
                // 展现的是最新 data 中的数据
                alert(msg);

            },

            //执行该函数说明对象处于准备的销毁阶段, 对象中的组件 (data, methods) 在此函数中依然可以使用的
            beforeDestory(){

            },

            // 执行该函数说明对象已经销毁完毕了, 对象中的组件(data, methods) 随着对象的销毁也不用了
            destoryed() {

            }
        });

    </script>
</body>

</html>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-06 17:16:21  更:2022-06-06 17:16:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:26:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码