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 相关文章推荐
document.onreadystatechange事件的用法分析
Oct 17 Javascript
关于URL中的特殊符号使用介绍
Nov 03 Javascript
基于jquery的可多选的下拉列表框
Jul 20 Javascript
用Jquery实现滚动新闻
Feb 12 Javascript
jquery中post方法用法实例
Oct 21 Javascript
JavaScript面向对象之私有静态变量实例分析
Jan 14 Javascript
jQuery图片切换动画特效
Nov 02 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
Feb 10 Javascript
微信小程序wx.previewImage预览图片实例详解
Dec 07 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
快速解决vue-cli不能初始化webpack模板的问题
Mar 20 Javascript
微信小程序wx.request拦截器使用详解
Jul 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编程网上资源导航
2006/10/09 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
动态加载js的几种方法
2006/10/23 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
python开发入门——列表生成式
2020/09/03 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
Django实现随机图形验证码的示例
2020/10/15 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
服务中心夜班服务员岗位职责
2013/11/27 职场文书
客房主管岗位职责
2013/12/09 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
小学节能减排倡议书
2014/05/15 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
redis 存储对象的方法对比分析
2021/08/02 Redis