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 相关文章推荐
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
Apr 21 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
Feb 19 Javascript
jQuery EasyUI API 中文文档 - Panel面板
Sep 30 Javascript
30分钟就入门的正则表达式基础教程
Feb 25 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
vue服务端渲染添加缓存的方法
Sep 18 Javascript
其实你可以少写点if else与switch(推荐)
Jan 10 Javascript
Vue初始化中的选项合并之initInternalComponent详解
Jun 11 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 token使用与验证示例【测试可用】
2017/08/30 PHP
jQuery 性能优化指南 (1)
2009/05/21 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python随机生成数模块random使用实例
2015/04/13 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
pycharm安装图文教程
2017/05/02 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
详解python中sort排序使用
2019/03/23 Python
Python简单基础小程序的实例代码
2019/04/28 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python列表操作方法详解
2020/02/09 Python
python打开文件的方式有哪些
2020/06/29 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
小学节能减排倡议书
2014/05/15 职场文书
学校联谊协议书
2014/09/16 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
家属联谊会致辞
2015/07/31 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js