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 相关文章推荐
在你的网页中嵌入外部网页的方法
Apr 02 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
js根据日期判断星座的示例代码
Jan 23 Javascript
纯css实现窗户玻璃雨滴逼真效果
Aug 23 Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
Mar 03 Javascript
解决vue数组中对象属性变化页面不渲染问题
Aug 09 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
Sep 29 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
JavaScript实现更换背景图片
Oct 18 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自动更新新闻DIY
2006/10/09 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
使用Python写个小监控
2016/01/27 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python利用tkinter实现屏保
2019/07/30 Python
Mac安装python3的方法步骤
2019/08/09 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
计算机大学生的自我评价
2013/10/15 职场文书
投标邀请书范文
2014/01/31 职场文书
安全生产先进个人材料
2014/02/06 职场文书
团代会宣传工作方案
2014/05/08 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
教师听课学习心得体会
2016/01/15 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
了解Redis常见应用场景
2021/06/23 Redis