浅析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 中的replace方法说明
Apr 13 Javascript
Extjs TimeField 显示正常时间格式的代码
Jun 28 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
Oct 24 Javascript
Jquery中给animation加更多的运作效果实例
Sep 05 Javascript
jQuery简单实现banner图片切换
Jan 02 Javascript
jQuery+html5实现div弹出层并遮罩背景
Apr 15 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
Dec 08 Javascript
Angular之toDoList的实现代码示例
Dec 02 Javascript
layui 监听表格复选框选中值的方法
Aug 15 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
ES6函数实现排它两种写法解析
May 13 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
Vue前后端不同端口的实现方法
2018/09/19 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python黑魔法之编码转换
2016/01/25 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
python绘制直方图和密度图的实例
2019/07/08 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
品学兼优的大学生自我评价
2013/09/20 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
高中军训广播稿
2014/01/14 职场文书
高中军训感言600字
2014/03/11 职场文书
房地产项目建议书
2014/03/12 职场文书
企业精神口号
2014/06/11 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
2014年转正工作总结
2014/11/08 职场文书
商务考察邀请函模板
2015/02/02 职场文书
大班上学期个人总结
2015/02/13 职场文书
预备党员个人总结
2015/02/14 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android