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 模态对话框和非模态对话框操作技巧汇总
Apr 15 Javascript
javascript制作游戏开发碰撞检测的封装代码
Mar 31 Javascript
angularjs创建弹出框实现拖动效果
Aug 25 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 Javascript
原生js实现无限循环轮播图效果
Jan 20 Javascript
JS实现复制内容到剪贴板功能
Feb 05 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
前端常见跨域解决方案(全)
Sep 19 Javascript
浅谈在Vue.js中如何实现时间转换指令
Jan 06 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
Aug 16 Javascript
js实现全选和全不选功能
Jul 28 Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 25 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开发文档 会员收费1期
2012/08/14 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
python实现连接mongodb的方法
2015/05/08 Python
详解python单例模式与metaclass
2016/01/15 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
Python装饰器简单用法实例小结
2018/12/03 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
Python实现自动签到脚本功能
2020/08/20 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
RetroStage德国:复古服装
2019/02/03 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
办加油卡单位介绍信
2014/01/09 职场文书
电子商务专业求职信
2014/03/08 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS