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.post用法之type设置问题
Feb 24 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
Sep 14 Javascript
input点击后placeholder中的提示消息消失
Jan 15 Javascript
JavaScript中的this引用(推荐)
Aug 05 Javascript
微信小程序 video组件详解
Oct 25 Javascript
AngularJS中watch监听用法分析
Nov 04 Javascript
纯js实现悬浮按钮组件
Dec 17 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 Javascript
webpack 处理CSS资源的实现
Sep 27 Javascript
JS常用排序方法实例代码解析
Mar 03 Javascript
vue npm install 安装某个指定的版本操作
Aug 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源代码
2009/08/21 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
原生js和jquery实现图片轮播特效
2015/04/23 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
全球立体声:World Wide Stereo
2018/09/29 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
致1500米运动员广播稿
2014/02/07 职场文书
个人委托书怎么写
2014/04/04 职场文书
学生实习证明范文
2014/09/28 职场文书
公司股份合作协议书
2014/12/07 职场文书
听证通知书
2015/04/24 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
JAVA springCloud项目搭建流程
2022/05/11 Java/Android