浅析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中将字符串转换成json的三种方式
Jan 12 Javascript
防止文件缓存的js代码
Jan 10 Javascript
jquery form表单序列化为对象的示例代码
Mar 05 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
Jul 18 Javascript
html+js+highcharts绘制圆饼图表的简单实例
Aug 04 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
微信小程序使用第三方库Immutable.js实例详解
Sep 27 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
May 07 Javascript
微信小程序实现吸顶特效
Jan 08 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
Jan 26 Javascript
vue-cli设置publicPath小记
Apr 14 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python正则表达式match和search用法实例
2015/03/26 Python
Python将图片转换为字符画的方法
2020/06/16 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Django-migrate报错问题解决方案
2020/04/21 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
电子商务应届生求职信
2013/11/16 职场文书
《乡愁》教学反思
2014/02/18 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
Python日志模块logging用法
2022/06/05 Python