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 相关文章推荐
jQuery图片播放8款精美插件分享
Feb 17 Javascript
JSONP跨域请求实例详解
Jul 04 Javascript
js中遍历对象的属性和值的方法
Jul 27 Javascript
js入门之Function函数的使用方法【新手必看】
Nov 22 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
JS中的数组转变成JSON格式字符串的方法
May 09 Javascript
vue实现商城上货组件简易版
Nov 27 Javascript
vue将单页面改造成多页面应用的方法
Nov 25 Javascript
JavaScript实现随机点名器实例详解
May 07 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
Nov 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的header和asp中的redirect比较
2006/10/09 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
JQuery live函数
2010/12/24 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
python实现提取百度搜索结果的方法
2015/05/19 Python
深入了解Python数据类型之列表
2016/06/24 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
汽车维修专业个人求职信范文
2014/01/01 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
使用Python解决图表与画布的间距问题
2022/04/11 Python
MySQL分布式恢复进阶
2022/07/23 MySQL
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技
mysql数据库如何转移到oracle
2022/12/24 MySQL