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 Array(数组)相关方法简述
Jul 25 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
Sep 13 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
angularjs中回车键触发某一事件的方法
Apr 24 Javascript
vue-prop父组件向子组件进行传值的方法
Mar 01 Javascript
Vue 全局loading组件实例详解
May 29 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
Oct 31 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
Nov 20 Javascript
vue实现双向绑定和依赖收集遇到的坑
Nov 29 Javascript
js实现多张图片每隔一秒切换一张图片
Jul 29 Javascript
JS如何操作DOM基于表格动态展示数据
Oct 15 Javascript
详解Vue的sync修饰符
May 15 Vue.js
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+xslt在windows平台上
2006/10/09 PHP
为查询结果建立向后/向前按钮
2006/10/09 PHP
PHP实时显示输出
2008/10/02 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
js实现交通灯效果
2017/01/13 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
python生成器的使用方法
2013/11/21 Python
python中的代码编码格式转换问题
2015/06/10 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python三方库之requests的快速上手
2019/03/04 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
python自动下载图片的方法示例
2020/03/25 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
追悼会上的答谢词
2014/01/10 职场文书
网络编辑职责
2014/03/01 职场文书
项目建议书模板
2014/05/12 职场文书
初中家长评语和期望
2014/12/26 职场文书
信用卡收入证明范本
2015/06/12 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android