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 相关文章推荐
又一个图片自动缩小的JS代码
Mar 10 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
jquery插件制作 自增长输入框实现代码
Aug 17 jQuery
js鼠标滑过弹出层的定位IE6bug解决办法
Dec 26 Javascript
js倒计时小程序
Nov 05 Javascript
javascript打开word文档的方法
Apr 16 Javascript
jquery.cookie.js使用指南
Jan 05 Javascript
常用DOM整理
Jun 16 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
Mar 13 Javascript
node-sass安装失败的原因与解决方法
Sep 04 Javascript
JS中跳出循环的示例代码
Sep 14 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
不安全的常用的js写法
2009/09/15 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
浅谈javascript的调试
2015/01/28 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python实现单词翻译功能
2017/06/06 Python
python实现彩票系统
2020/06/28 Python
Python数据集切分实例
2018/12/08 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
python cumsum函数的具体使用
2019/07/29 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS