vue2.x学习笔记(三)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12562137.html。
vue实例
要使用vue提供的特性与功能,都需要通过vue实例来使用。
创建一个vue实例
每一个vue应用,都是通过用Vue函数创建一个新的vue实例开始的。
var vm = new Vue({
// 选项(属性)
})
虽然vue没有完全遵循mvvm模型,但是一些设计还是收到了其中的启发,因此官方文档中经常会使用vm(view-model)这个变量名来表示vue的实例。
所谓的vue实例,就是一个由vue函数创建出来的对象,一切使用vue提供的操作,都是基于这个实例对象上的。当创建一个vue实例的时候,可以传入一个选项对象,这些选项对象,其实就是vue实例对象的属性,用于描述该vue实例对象中的特征与行为。一个vue应用由一个通过Vue函数创建的根vue实例,以及可选的、嵌套的和可复用的组件树组成。
vue实例的数据与方法
当一个vue实例被创建的时候,它会将data对象中的所有的属性加入到vue的响应式系统中,当这些属性的值发生改变的时候,视图会同步响应,匹配更新为新的值。
// 我们的数据对象
var data = { a: 1 } // 该对象被加入到一个 Vue 实例中
var vm = new Vue({
data: data
}) // 获得这个实例上的属性
// 返回源数据中对应的字段
vm.a == data.a // true // 设置属性也会影响到原始数据
vm.a = 2
data.a // // 反之亦然
data.a = 3
vm.a //
而当这些数据发生改变之后,视图就会进行重渲染。值得注意的是,只有当实例被创建的时候就存在于data中的属性才是响应式的,如果在实例创建之后才往data中添加的属性,是不具备【响应式】这个特性的。
vm.b = 'hi'
像上面这行代码,任何对于b的改动都不会触发任何视图的更新。这样的话,所有需要【响应式】特性的属性都必须在实例被创建的时候就存在与data中,即使一开始它为空或不存在,你也需要在data中提前定义该属性并赋予相应的初值(默认值),以此来避免某个属性获取不到【响应式】的特性。
data: {
yanggb1: '',
yanggb2: 0,
yanggb3: false,
yanggb4: [],
yanggb5: null
}
这里的唯一例外是使用Object.freeze()方法,这个方法会阻止修改现有的属性,意味着响应系统无法再追踪数据的变化而使属性失去了【响应式】的特性。
var obj = {
foo: 'bar'
} Object.freeze(obj) new Vue({
el: '#app',
data: obj
})
<div id="app">
<p>{{ foo }}</p>
<!-- 这里的 `foo` 不会更新! -->
<button v-on:click="foo = 'baz'">Change it</button>
</div>
除了数据属性之外,vue实例还暴露了一些有用的实例属性与方法,它们的一个特点是命名前缀都是【$】,意图是与用户定义的属性与方法区分开,比如$data、$el和$watch等。
var data = { a: 1 }
var vm = new Vue({
el: '#example',
data: data
}) vm.$data === data // true
vm.$el === document.getElementById('example') // true // $watch 是一个实例方法
vm.$watch('a', function (newValue, oldValue) {
// 这个回调将在vm.a改变后调用
})
我们也可以很轻松地通过控制台稍微浏览下都有哪些特定的实例属性与方法。
这些特定的实例属性和方法都有特定的使用场景,官方也提供了相应的api文档来方便开发者查阅和使用,这里就先稍微了解一下,知道有这些个东西就好了。
实例生命周期钩子
每一个vue实例在被创建的时候都要经过一系列的初始化过程,例如需要设置数据监听、编译模板或将实例挂载到dom并在数据变化时更新dom等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,提供了用户在不同的阶段添加特定的逻辑代码的机会。这里最重要的一点是,生命周期钩子是函数,生命周期钩子是函数,生命周期钩子是函数,也有人叫做生命周期钩子函数,一些初学者(比如我)看到【生命周期钩子】这个名词可能会一头雾水,其实也就是一些函数而已,只是这些函数是和vue实例创建的一系列初始化过程密切相关,在每个特定的阶段会执行某个特定的生命周期钩子函数。比如created钩子函数可以用来在一个实例被创建之后执行代码。
new Vue({
data: {
a: 1
},
created: function () {
// this指向的是vm实例
console.log('a is: ' + this.a) // "a is: 1"
}
})
还有其他的钩子函数,比如mouted、updated和destroyed,它们会在实例生命周期的不同阶段被调用。特别说明的是,在生命周期钩子函数中,如果使用this关键字的话,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
之类的错误。
上面这段话是官方文档上特别标注的使用生命周期钩子的注意事项,总结就是,除了自己实现的逻辑以外,建议不要在vue中使用箭头函数(只要是vue提供的都避免使用),否则可能出现意料之外的错误。
生命周期图示
官方文档放出了一张实例生命周期的图示,对于开发者来说,几乎是教科书般的存在。
初学者并不需要马上弄懂整张图,而是应该随着学习的深入,慢慢弄懂(会自然弄懂嘛)。
"我还是很喜欢你,像鲸沉于海底,温柔无息。"
vue2.x学习笔记(三)的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Learning ROS for Robotics Programming Second Edition学习笔记(三) indigo rplidar rviz slam
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- java split方法使用注意事项
在java.lang包中有String.split()方法,返回是一个数组. 使用时要注意参数如果是特殊符号的话要进行转义. 1."."和"|"都是转义字符,必 ...
- DrQA 阅读维基百科来回答开放问题 Reading Wikipedia to Answer Open-Domain Questions
DrQA 是一个阅读理解系统用在开放领域问答.特别的,DrQA 针对一个机器阅读任务.在这个列表里,我们为一个潜在非常大的预料库中搜索一个问题的答案.所以,这个系统必须结合文本检索和机器文本理解. 项 ...
- python之字符编码与转码
说起python编码,真是句句心酸,今天终于是,终于梳理清楚了,下面我们就来一起揭开py编码的真相吧! 一,什么是编码? 其实基本概念很简单.我们都知道消息,那么消息就是人类所能理解的,简单易懂的存在 ...
- 维护你的请求队列,处理token异常
前言 网络请求是开发中最基础也是最核心的需求,封装一个稳定且可用性高的请求也显得尤为重要.通常封装的内容除了入参之外,更多的是请求中的异常处理.本文分享下我在处理 token 异常方面的做法,通过维护 ...
- liunx 上安装redis
目录 1.安装包 2.解压:tar xzf redis-5.0.5.tar.gz 3.安装 4.编辑redis.conf文件 5.配置密码 6.启动配置: 7.配置公网链接 8.杀掉redis进程 9 ...
- Nginx 简介与安装
1,简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄 ...
- [noip模拟]祖孙询问<LCA>
[问题描述] 已知一棵n个节点的有根树.有m个询问.每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系. [输入格式] 输入第一行包括一个整数n表示节点个数. 接下来n行每行一对整数对a和b表示 ...
- phpwind 安装下一步空白解决方案
系统版本 centos 翻阅网上大部分都是php版本问题,让降级就行了,试了之后根本不行 其实再安装一个插件即可成功 如下: yum install -y php-mysql
- 1+X Web前端开发(中级)理论考试样题(附答案)
传送门 教育部:职业教育将启动"1+X"证书制度改革 职业教育改革1+X证书制度试点启动 1+X成绩/证书查询入口 一.单选题(每小题2分,共30小题,共 60 分) 1.在Boo ...
- Kafka监控:主要性能指标
Kafka是什么? Kafka是一个分布式,有分区的,有副本的日志服务系统,由LinkedIn公司开发,并于2011年开源.从本质上来说,Kafka拥有一套可扩展的发布/订阅消息队列架构,并组成了一套 ...