浅析Vue实例以及生命周期


Posted in Javascript onAugust 14, 2018

最简单的Vue 实例

//html
<div id="app">
 {{message}}
</div>

//javascript
var vm = new Vue({
 el: '#app',
 data: {
 message: 'Hello Vue!'
 }
})

由于 Vue 借鉴了 MVVM 的思想,这里的字符串 "Hello Vue!" 就相当于 Model,DOM 就相当于 View,Vue 实例 "vm" 则是起连接 Mode 和 View 作用的 ViewModel,因此我们才得以通过数据驱动视图,而不需要关心它是怎么实现的,因为 Vue 已经帮我们做好了一切。

Vue 实例内置的属性和方法都是以 "$" 开头的,例如:vm.$data、vm.$el 等,另外选项并不等于实例,选项是通过 new Vue() 构造函数时传入的参数对象,但是实例可以从暴露的接口访问某些选项的值,例如:console.log(vm.$data.message) 输出 "Hello Vue!"。

实例的生命周期

在创建实例的过程中,Vue 提供了一些生命周期钩子函数,允许我们再某一特定阶段执行一些额外的操作:

beforeCreate:

在实例初始化之后,数据绑定之前会调用这个函数,例如:

//javascript
var vm = new Vue({
 el: '#app',
 data: {
  message: 'Hello Vue!'
 },
 beforeCreate: function() {
  console.log(this.message); //undefind
 }
})

需要说明的有两点:1、这里的 "this" 指向 Vue 实例,即 "vm",2、Vue 实例同时也代理了选项中 "data" 下的所有属性,也就是说 vm.message == vm.$data.message == "Hello Vue!",但是因为在这个阶段数据并没有绑定到 Vun 实例上面,所以输出 "undefind"。在这之前数据会先保存在 vm.$options 中,如果要在这个阶段获取数据,可以先通过 vm.$options.data() 方法,返回 "data" 对象,通过 vm.$options.data().message 返回对应的值。
在这个阶段可以做一些不需要数据的工作,比如说开启全局 loading 效果。

created:

在实例创建完成,数据绑定之后会调用这个函数,此时 console.log(this.message) 输出正确的值 "Hello Vue!"。
在这个阶段,数据已经初始化为选项中的默认值,但是真实的数据还要通过 ajax 从后端数据库获取,因此这个阶段可以向后端发请求获取数据,然后绑定到对应属性上。

之后判断选项中有无 "el" 属性(作为 Vue 实例的挂载目标,在这里就是 id 为 app 的 div 标签),如果没有,则需要手动调用 vm.$mount(el) 方法指定挂载的目标;

接着判断选项中有无 "template" 属性,如果没有,则直接使用 "el" 属性指定的挂载目标,如果有,那么就用 "template" 属性指定的字符串模板替换挂载目标,挂载目标中的所有内容将被忽略;

beforeMount:

在实例挂载之前调用。

在这个阶段可以移除全局 loading 效果。

mounted:

在实例挂载之后调用。

在这个阶段页面已经加载完毕,可以对 DOM 进行操作。

beforeUpdate:

在数据更新时调用。

在这个阶段可以在数据更新前访问现有的 DOM。

updated:

在数据更新之后调用。

在这个阶段可以对更新后的 DOM 进行操作。

Javascript 相关文章推荐
记录几个javascript有关的小细节
Apr 02 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
用js来获取上传的文件名纯粹是为了美化而用
Oct 23 Javascript
JS仿Windows开机启动Loading进度条的方法
Feb 26 Javascript
js创建对象的方法汇总
Jan 07 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
Jun 06 Javascript
轻松实现jquery选项卡切换效果
Oct 10 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
微信小程序显示下拉列表功能【附源码下载】
Dec 12 Javascript
vue微信分享插件使用方法详解
Feb 18 Javascript
vue项目配置使用flow类型检查的步骤
Mar 18 Javascript
关于uniApp editor微信滑动问题
Jan 15 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
Aug 14 #Javascript
详解angular应用容器化部署
Aug 14 #Javascript
使用node.js实现微信小程序实时聊天功能
Aug 13 #Javascript
JQuery通过后台获取数据遍历到前台的方法
Aug 13 #jQuery
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 #Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 #Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 #Javascript
You might like
PHP制作图型计数器的例子
2006/10/09 PHP
dedecms模版制作使用方法
2007/04/03 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
初识laravel5
2015/03/02 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python 反向输出字符串的方法
2018/07/16 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
泰国在线书店:SE-ED
2020/06/21 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
北大自主招生自荐信
2013/10/19 职场文书
医学院四年学习生活的自我评价
2013/11/06 职场文书
党员检讨书范文
2014/12/27 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
告知书格式
2015/07/01 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
详解Python自动化之文件自动化处理
2021/06/21 Python
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android