浅析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 相关文章推荐
js 匿名调用实现代码
Jun 19 Javascript
EasyUI中的tree用法介绍
Nov 01 Javascript
jquery 缓存问题的几个解决方法
Nov 11 Javascript
JavaScript中setInterval的用法总结
Nov 20 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
Nov 16 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
element-ui tree结构实现增删改自定义功能代码
Aug 31 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 类型转换函数intval
2009/06/20 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
php中的动态调用实例分析
2015/01/07 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
详解python算法之冒泡排序
2019/03/05 Python
python3实现高效的端口扫描
2019/08/31 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
如何利用find命令查找文件
2016/11/18 面试题
咨询公司各岗位职责
2013/12/02 职场文书
销售团队激励口号
2014/06/06 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
企业计划生育责任书
2015/05/09 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
仙境之桥观后感
2015/06/16 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS