浅析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对象是否可用的最正确方法分析
Oct 03 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 Javascript
jquery.post用法示例代码
Jan 03 Javascript
jQuery 设置 CSS 属性示例介绍
Jan 16 Javascript
教你如何使用node.js制作代理服务器
Nov 26 Javascript
javascript中数组方法汇总
Jul 07 Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 Javascript
jQuery为DOM动态追加事件的方法
Feb 16 Javascript
在Vue中使用Compass的方法
Mar 02 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 Javascript
JS中this的4种绑定规则详解
Feb 04 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 远程图片保存到本地的函数类
2008/12/08 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
Python实现批量压缩图片
2018/01/25 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Flask框架配置与调试操作示例
2018/07/23 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
python计算无向图节点度的实例代码
2019/11/22 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
高中生物教学反思
2014/02/05 职场文书
电子商务专业求职信
2014/03/08 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
初中英语教学随笔
2015/08/15 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python
Redis 哨兵集群的实现
2021/06/18 Redis
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技