下面是本文的屏幕录像的在线视频:

03-Vue实例

04-生命周期示意图+钩子函数

温馨提示:

1、视频下载:线上视频被压缩处理,可以下载高清版本:

03-Vue实例:https://pan.baidu.com/s/1O9lUFm2jRIlBeFrBjXPZIA 提取码:nbzt

03-生命周期示意图+钩子函数:https://pan.baidu.com/s/1D4ndTSgPBNGE8D4_Hcx-1A 提取码:jst4

2、示例代码:https://pan.baidu.com/s/1OcZ_ZPwxIlEoYRD7coc4gQ 提取码:y9we

下图是文章大纲:

一、概述

本章介绍如何创建Vue实例,以及实例的数据、方法和生命周期钩子函数等内容。

二、创建Vue实例

每个Vue应用程序都通过使用以下功能创建一个新的应用程序实例

该应用程序实例用于注册“全局变量”,然后可由该应用程序内的组件使用。下面是一个快速实例:

应用程序实例公开的大多数方法都返回相同的实例,从而允许链式调用

示例代码:01-HelloWorld.html

三、根实例

传递给createApp()的选项用于配置根组件,该组件将用作渲染的起点。需要将应用程序安装到DOM元素中。如下代码所示:
 
与大多数应用程序方法不同,mount它不返回应用程序,而是返回根组件实例。大多数实际应用程序都被组织为嵌套的可重用组件树
 
每个组件都有自己的组件实例vm,此应用程序中的所有组件实例将共享同一应用程序实例根组件与其他组件并没有什么不同,配置选项与相应组件实例的行为相同。

四、组件实例属性

1、属性+响应


示例代码:02-Attribute.html
当一个Vue实例被创建时,它将data对象中的所有的属性加入到Vue的响应式系统中。当这些属性值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

示例代码:03-Attribute.html
无论如何定义组件实例的所有属性,都可以在组件的模板中访问它们值得注意的是只有当实例被创建时就已经存在于data中的属性才是响应式的。如果你知道你会在晚些时候需要一个属性,但是一开始它为空或不存在,那么你仅需要设置一些初始值。
 

2、Object.freeze()

方法Object.freeze()会阻止修改现有的属性,也意味着响应系统无法再追踪变化。
如下代码所示:

示例代码:04-Freeze.html

控制台同时也会出现如下的错误提示:

3、实例属性+方法

Vue实例还暴露了一些有用的实例属性与方法。它们都有前缀$,以便与用户定义的属性区分开来。

示例代码:05-InstanceAttribute.html

五、实例生命周期钩子

每个Vue实例在被创建时都要经过一系列的初始化过程。例如,需要设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

示例代码:06-LifecycleHooks.html
生命周期钩子的this上下文指向调用它的Vue实例。
在实例生命周期的不同阶段还会调用其他挂钩。
温馨提醒:不要在选项属性或回调上使用箭头函数,比如:
created: () => console.log(this.a)

vm.$watch('a', newValue => this.myMethod())
因为箭头函数并没有this,this会作为变量一直向上级词法作用域查找,直至找到为止,经常导致:
Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function之类的错误。

六、生命周期示意图

下面是实例生命周期的示意图。

后续需要专门的文章进行这方面的描述。

1、beforeCreate

在实例初始化之后,数据观察和事件/观察者设置之前立即同步调用,执行beforeCreate()函数时,data和methods中的数据还都没有被初始化。

2、created

创建实例后同步调用。在此阶段,实例已完成对选项的处理,这意味着已设置以下内容:数据、计算的属性、方法、监视/事件回调。但是,安装阶段尚未开始,该$el属性尚不可用。如果要调用methods中的方法和data中的数据,最早只能在created()函数中操作

3、beforeMount

当执行beforeMount()函数时,表示模板已经在内存中渲染好了,但是并没有真正的挂载到页面中去,此时页面还是旧的。

4、mouted

执行到mounted()函数,就表示整个Vue实例初始化完毕了,组件也已经挂载到页面上了。
但需要注意的是:mounted()这并不保证所有子组件也都已安装,如果你想等到整个组件都已经挂载到页面上,可以使用$nextTick()机制,如下代码所示:

5、beforeUpdate

当执行beforeUpdate()函数的时候,页面中显示的数据还是旧的。此时data里的数据已经更新完毕,但是页面尚未和最新的数据保持同步。
这是在更新之前访问现有DOM的好地方,例如,删除手动添加的事件侦听器。

6、updated

当updated()事件执行的时候,页面和data数据已经保持同步了,都是最新的。
调用此挂钩时,组件的DOM将已更新,因此您可以在此处执行与DOM相关的操作。
请注意,updated()这并不保证所有子组件也都已被重新渲染。如果你想等到整个视图都已经重新呈现,可以使用$nextTick(),如下代码所示:

7、beforeUnmount

在卸载组件实例之前立即调用。在此阶段,实例仍然可以正常运行。实例身上所有的data和所有的methods以及过滤器、指令等,都处于可用状态,此时还没有真正执行卸载过程。

8、unmounted

在卸载组件实例后调用。调用unmounted()钩子函数后,组件实例的所有指令均已解除绑定,所有事件侦听器均已删除,所有子组件实例也已卸载。
此时,组件中的所有数据、方法、过滤器、指令等,都已经不可用了。
此时Vue实例的生命周期已经全部结束。

9、示例代码

<html><head><title>Lifecycle Hooks</title><script src="https://unpkg.com/vue@next"></script>
</head><body><div id="attribute">this.data = {{ count }}<br><input type="button" value="修改数据" v-on:click="change"></input><input type="button" value="销毁" v-on:click="destroy"></input></div>
</body><script>const app = Vue.createApp({data() {return {count: 1,show: true};},methods: {change() {this.count = this.count + 1; // 修改数据。},destroy() {app.$destroy(); // 销毁组件。}},beforeCreate() {console.info("=================================================");console.info("beforeCreate");console.log("%c%s", "color:red", "el=" + this.$el);console.log("%c%s", "color:red", "data=" + this.$data);console.info(this.$data);console.log("%c%s", "color:red", "count=" + this.count);},created() {console.info("=================================================");console.info("created");console.log("%c%s", "color:red", "el=" + this.$el);console.log("%c%s", "color:green", "data=" + this.$data);console.info(this.$data);console.log("%c%s", "color:green", "count=" + this.count);},beforeMount() {console.info("=================================================");console.info("beforeMount");console.log("%c%s", "color:red", "el=" + (this.$el));console.log("%c%s", "color:green", "data=" + this.$data);console.info(this.$data);console.log("%c%s", "color:green", "count=" + this.count);},mounted() {console.info("=================================================");console.info("mounted");console.log("%c%s", "color:green", "el=" + (this.$el));console.info(this.$el);console.log("%c%s", "color:green", "data=" + this.$data);console.info(this.$data);console.log("%c%s", "color:green", "count=" + this.count);this.$nextTick(function() {// 整个界面都被渲染之后执行此处的代码。console.info("mounted next tick.");});},beforeUpdate() {debugger;console.info("=================================================");console.info("beforeUpdate, this.count=" + this.count);console.log("%c%s", "color:green", "el=" + (this.$el));console.log("%c%s", "color:green", "data=" + this.$data);console.log("%c%s", "color:green", "count=" + this.count);},updated() {console.info("=================================================");console.info("updated, this.count=" + this.count);console.log("%c%s", "color:green", "el=" + (this.$el));console.log("%c%s", "color:green", "data=" + this.$data);console.log("%c%s", "color:green", "count=" + this.count);},beforeUnmount() {console.info("=================================================");console.info("beforeUnmount");console.log("%c%s", "color:green", "el=" + (this.$el));console.log("%c%s", "color:green", "data=" + this.$data);console.log("%c%s", "color:green", "count=" + this.count);},unmounted() {console.info("=================================================");console.info("unmounted");console.log("%c%s", "color:green", "el=" + (this.$el));console.log("%c%s", "color:green", "data=" + this.$data);console.log("%c%s", "color:green", "count=" + this.count);}});let vm = app.mount("#attribute"); // 需要执行这句代码。
</script></html>

七、参考资料

https://v3.vuejs.org/guide/instance.html

https://cn.vuejs.org/v2/guide/instance.html

光脚丫思考Vue3与实战:第03章 Vue实例相关推荐

  1. 光脚丫思考Vue3与实战:第04章 模板语法 第01节 概述+插值

    下面是本文的屏幕录像的在线视频: 光脚丫思考Vue3与实战:第04章 模板语法 第01节 插值 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baid ...

  2. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第03节 计算属性的其他玩法

    下面是本文的屏幕录像的在线视频: 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1h600_BRR9O2Lr87zVQNgEw ...

  3. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第01节 计算属性

    下面是本文的屏幕录像的在线视频: 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1MiGKmrzp40i1ZD_4borteQ ...

  4. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第02节 侦听器

    下面是本文的屏幕录像的在线视频: 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1qUekWio3fpWToT9PiECpEg ...

  5. 光脚丫思考Vue3与实战:第04章 模板语法 第03节 指令的修饰符

    下面是本文的屏幕录像的在线视频: 第03节 指令的修饰符 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1J08bPvs6OI ...

  6. 光脚丫思考Vue3与实战:第02章 安装Vue.js

    下面是本文的屏幕录像的在线视频: 02-安装Vue.js 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本:https://pan.baidu.com/s/16594YUpNNrkjZf ...

  7. 光脚丫思考Vue3与实战:第01章 初步认识Vue3

    下面是本文的屏幕录像的在线视频: 01-初步认识Vue.js-PART1 01-初步认识Vue.js-PART2 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: PART1:http ...

  8. 光脚丫思考Vue3与实战:第04章 模板语法 第04节 指令的缩写

    下面是本文的屏幕录像的在线视频: 第04节 指令的缩写 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1Dd2HeUXH6DZ ...

  9. 光脚丫思考Vue3与实战:第04章 模板语法 第02节 指令的参数+动态参数

    下面是本文的屏幕录像的在线视频: 第02节 指令的参数+动态参数 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/11_hwQF ...

最新文章

  1. linux中的shell有printf吗,Linux Shell系列教程之(八)Shell printf命令详解
  2. 物联网将在2018年实现大规模发展:以下是IBM的4大预测
  3. 《UNIX环境编程》第十六章--网络IPC:套接字
  4. eclipse配置Struts2、Hibernate3、Spring2.5范例
  5. ASP.NET Core 1.1 Preview 1 简介(包含.NETCore 1.1升级公告)
  6. 【django】配置文件
  7. 案例 宠物医生给小动物看病 c# 1614100379
  8. PHP 中 call_user_func 的使用
  9. matlab怎么求三阶导数,三阶样条插值(一阶导数边界条件) matlab程序
  10. python文字转图片_技能:如何使用Python将文本转为图片
  11. kali安装步骤失败 选择并安装软件_PhotoShop CS5中文版软件下载+安装详细步骤
  12. httpd在嵌入式中应用
  13. Atitit USRqc62204 证书管理器标准化规范
  14. SQL2005数据库可疑的解决方法
  15. 软件测试固态硬盘健康状态良好,HDTune太老鲁大师太傻 用专业软件洞悉固态硬盘健康状态...
  16. 多边形的凹凸性判断及python实现
  17. 阿里云code的git
  18. c# sqlite 批量修改
  19. A cycle was detected in the build path of project 'core'. The cycle consists of projects {core, sms}
  20. notepad++一键删除重复行

热门文章

  1. 在线免费无限制的 PDF 处理工具(转换、编辑、分割、合并、压缩)
  2. ubuntu 安装五笔拼音输入法
  3. 25位全球顶尖创业者的26个日常习惯!
  4. (转)大型网站的负载均衡器、db proxy和db
  5. 多远线性回归代码-波士顿房价问题
  6. 盛科推出新一代超融合网络交换机E550系列
  7. python json文件操作_JSON文件及Python对JSON文件的读写操作
  8. 7-2 最佳情侣身高差 (10分)
  9. web.xml 解析
  10. 双驰智能足球鞋及AMAZFIT 羚羊轻户外跑鞋双双入围2018年中国优秀工业设计奖