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 相关文章推荐
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 Javascript
jQuery.buildFragment使用方法及思路分析
Jan 07 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
php利用curl获取远程图片实现方法
Oct 26 Javascript
JQuery validate插件Remote用法大全
May 15 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
Mar 06 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 jQuery
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
Vue v-for循环之@click点击事件获取元素示例
Nov 09 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下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
js时间日期和毫秒的相互转换
2013/02/22 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python中协程用法代码详解
2018/02/10 Python
Python检测网络延迟的代码
2018/05/15 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
工程业务员工作职责
2013/12/07 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
党支部评议意见
2015/06/02 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
简历自我评价范文
2019/04/24 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers