热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vue.js学习笔记二:Vue基本使用之Vue实例

目录Vue实例创建一个Vue实例数据与方法生命周期钩子Vue实例创建一个Vue实例每个Vue应用都是通过用Vue函数创建一个新的Vue实例开始的:varv

 

目录

 

Vue 实例

创建一个 Vue 实例

数据与方法

生命周期钩子




Vue 实例


创建一个 Vue 实例

每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的:

var vm = new Vue({// 选项
})

Vue 实例和 Vue 应用是什么关系呢?官方介绍:一个 Vue 应用由一个通过new Vue()创建的根 Vue 实例,以及可选的嵌套的、可复用的组件树组成。所以 Vue 实例是属于 Vue 应用的一部分,与组件树组成了 Vue 应用:

// 一个Vue应用,由根实例+组件树组成
根实例
└─ 根组件 // 此行开始,为组件树├─ 组件1│ ├─ 组件1-1│ └─ 组件1-2└─ 组件2├─ 组件2-1└─ 组件2-2

 


数据与方法

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

{{ msg }}

当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时就已经存在于 data 中的 property 才是响应式的。也就是说如果你添加一个新的 property,比如:

vm.code = 0

那么对 code 的改动将不会触发任何视图的更新。如果你知道你会在晚些时候需要一个 property,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:

var data = { msg: "hello vue", code: null }

这里唯一的例外是使用 Object.freeze(),这会阻止修改现有的 property,也意味着响应系统无法再追踪变化。

// 我们的数据对象var data = { msg: "hello vue", code: null }// 阻止修改现有的 propertyObject.freeze(data)// 该对象被加入到一个 Vue 实例中var vm = new Vue({el: '#app',data: data})

Vue 实例提供了非常丰富的选项(new Vue()时传入的选项),除了下面介绍的生命周期之外,最常见的大概是这几个了:


选项名说明类型
el通过 CSS 选择器或者 HTMLElement 实例的方式,提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标string/Element
template字符串模板,将会替换挂载的元素string
render字符串模板的代替方案,该渲染函数接收一个createElement方法作为第一个参数用来创建 VNode(createElement: () => VNode) => VNode
dataVue 实例的数据对象,用于数据绑定Object/Function 组件只支持Function
props用于接收来自父组件的数据Array/Object
methodsVue 实例的事件,可用于事件绑定{ [key: string]: Function }
computed计算属性,用于简化模板的复杂数据计算{ [key: string]: Function or { get: Function, set: Function } }
watch观察 Vue 实例变化的一个表达式或计算属性函数{ [key: string]: string or Function or Object or Array }
directives自定义指令Object
filters过滤器Object
components组件Object

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

vm.$data; // 获取 data
vm.$props; // 获取 props
vm.$el; // 获取挂载元素
vm.$options; // 获取 Vue 实例的初始选项
vm.$parent; // 获取父实例
vm.$root; // 获取根实例
vm.$children; // 获取当前实例的直接子组件
vm.$refs; // 获取持有注册过 ref 特性 的所有 DOM 元素和组件实例vm.$watch; // 观察 Vue 实例变化的一个表达式或计算属性函数
vm.$set; // 向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新
vm.$delete; // 删除对象的属性。如果对象是响应式的,确保删除能触发更新视图

更完整的选项内容和 API,大家可以去官网查询。


 


生命周期钩子

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

在 Vue 中要渲染一块页面内容的时候,会有这么几个过程:

(1) 解析语法生成 AST。

(2) 根据 AST 结果,完成 data 数据初始化。

(3) 根据 AST 结果和 data 数据绑定情况,生成虚拟 DOM。

(4) 将虚拟 DOM 生成真正的 DOM 插入到页面中,此时页面会被渲染。

当我们绑定的数据进行更新的时候,又会产生以下这些过程:

(5) 框架接收到数据变更的事件,根据数据生成新的虚拟 DOM 树。比较新旧两棵虚拟 DOM 树,得到差异。

(6) 把差异应用到真正的 DOM 树上,即根据差异来更新页面内容。

当我们清空页面内容时,还有:

(7) 注销实例,清空页面内容,移除绑定事件、监听器等。

Vue 生命周期说明


生命周期钩子说明对应上述步骤
beforeCreate初始化实例前,datamethods等不可获取1 之后,2 之前
created实例初始化完成,此时可获取data里数据和methods事件,无法获取 DOM2 之后,3 之前
beforeMount虚拟 DOM 创建完成,此时未挂载到页面中,vm.$el可获取未挂载模板3 之后,4 之前
mounted数据绑定完成,真实 DOM 已挂载到页面,vm.$el可获取真实 DOM4 之后
beforeUpdate数据更新,DOM Diff 得到差异,未更新到页面5 之后,6 之前
updated数据更新,页面也已更新6 之后
beforeDestroy实例销毁前7 之前
destroyed实例销毁完成7 之后

官方的生命周期图如下:


官方生命周期图

 生命周期钩子的使用方式也很简单,我们可以根据需要在特定的生命周期钩子里进行一些处理:

// 我们的数据对象var data = { msg: "hello vue", code: null }// Object.freeze(data)// 该对象被加入到一个 Vue 实例中var vm = new Vue({el: '#app',data: data,beforeCreate: function() {// 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用console.log("beforeCreate", this.msg, this.$el);},created: function() {// 在实例创建完成后被立即调用// 在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调// 挂载阶段还没开始,$el 属性目前不可见console.log("created", this.msg, this.$el);},beforeMount: function() {// 在挂载开始之前被调用:相关的 render 函数首次被调用console.log("beforeMount", this.msg, this.$el);},mounted: function() {// el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子// 如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内// mounted 不会承诺所有的子组件也都一起被挂载// 如果希望等到整个视图都渲染完毕,可以用 vm.$nextTick 替换掉 mountedconsole.log("mounted", this.msg, this.$el);this.$nextTick(function() {// 此处整个视图已渲染完毕});},beforeUpdate: function() {// 数据更新时调用,发生在虚拟 DOM 打补丁之前// 这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器},updated: function() {// 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子// 当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作},beforeDestroy: function() {// 实例销毁之前调用。在这一步,实例仍然完全可用},destroyed: function() {// Vue 实例销毁后调用// 调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁}})

页面中我们可以看到输出结果,验证了几个生命周期的data、DOM 挂载等情况:

 

 

 

 

 

 

 


推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
author-avatar
fdasfwgafaweg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有