Vue.js每天必学之构造器与生命周期


Posted in Javascript onSeptember 05, 2016

构造器

每个 Vue.js 应用的起步都是通过构造函数 Vue 创建一个 Vue 的根实例:

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

一个 Vue 实例其实正是一个 MVVM 模式中所描述的 ViewModel - 因此在文档中经常会使用 vm 这个变量名。

在实例化 Vue 时,需要传入一个选项对象,它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。全部的选项可以在 API 文档中查看。

可以扩展 Vue 构造器,从而用预定义选项创建可复用的组件构造器:

var MyComponent = Vue.extend({
 // 扩展选项
})

// 所有的 `MyComponent` 实例都将以预定义的扩展选项被创建
var myComponentInstance = new MyComponent()

尽管可以命令式地创建扩展实例,不过在多数情况下将组件构造器注册为一个自定义元素,然后声明式地用在模板中。我们将在后面详细说明组件系统。现在你只需知道所有的 Vue.js 组件其实都是被扩展的 Vue 实例。

属性与方法

每个 Vue 实例都会代理其 data 对象里所有的属性:

var data = { a: 1 }
var vm = new Vue({
 data: data
})

vm.a === data.a // -> true

// 设置属性也会影响到原始数据
vm.a = 2
data.a // -> 2

// ... 反之亦然
data.a = 3
vm.a // -> 3

注意只有这些被代理的属性是响应的。如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。我们将在后面详细讨论响应系统。

除了这些数据属性,Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $,以便与代理的数据属性区分。例如:

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 (newVal, oldVal) {
 // 这个回调将在 `vm.a` 改变后调用
})

参考 API 文档查看全部的实例属性与方法。

实例生命周期

Vue 实例在创建时有一系列初始化步骤——例如,它需要建立数据观察,编译模板,创建必要的数据绑定。在此过程中,它也将调用一些生命周期钩子,给自定义逻辑提供运行机会。例如 created钩子在实例创建后调用:

var vm = new Vue({
 data: {
 a: 1
 },
 created: function () {
 // `this` 指向 vm 实例
 console.log('a is: ' + this.a)
 }
})
// -> "a is: 1"

也有一些其它的钩子,在实例生命周期的不同阶段调用,如 compiled、 ready 、destroyed。钩子的 this 指向调用它的 Vue 实例。一些用户可能会问 Vue.js 是否有“控制器”的概念?答案是,没有。组件的自定义逻辑可以分割在这些钩子中。

生命周期图示

下图说明了实例的生命周期。你不需要立马弄明白所有的东西,不过以后它会有帮助。

Vue.js每天必学之构造器与生命周期

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript与DropDownList 区别分析
Jan 01 Javascript
JavaScript执行顺序详细介绍
Dec 04 Javascript
js限制文本框只能输入中文的方法
Aug 11 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
理解javascript异步编程
Jan 27 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
Mar 29 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
Dec 01 Javascript
基于jQuery的表单填充实例
Aug 22 jQuery
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
Jul 19 Javascript
vue3.0中的双向数据绑定方法及优缺点
Aug 01 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
Sep 04 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
Sep 05 #Javascript
JS查找字符串中出现次数最多的字符
Sep 05 #Javascript
node网页分段渲染详解
Sep 05 #Javascript
js对象浅拷贝和深拷贝详解
Sep 05 #Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 #Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
Sep 04 #Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 #Javascript
You might like
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
c语言常见笔试题总结
2016/09/05 面试题
自荐书模板
2013/12/15 职场文书
爱情保证书范文
2014/02/01 职场文书
士力架广告词
2014/03/20 职场文书
保护环境的标语
2014/06/09 职场文书
经理岗位职责
2015/02/02 职场文书
慰问信模板
2015/02/14 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python