浅析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 防止刷新,后退,关闭
Aug 07 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
Jun 25 Javascript
浅析node连接数据库(express+mysql)
Nov 30 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
Mar 07 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
Nov 12 Javascript
JS+html5制作简单音乐播放器
Sep 13 Javascript
jquery仿微信聊天界面
May 06 jQuery
Agularjs妙用双向数据绑定实现手风琴效果
May 26 Javascript
React注册倒计时功能的实现
Sep 06 Javascript
小程序采集录音并上传到后台
Nov 22 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+js实现异步图片上传实例分享
2014/06/02 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PDO::rollBack讲解
2019/01/29 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
innerText 使用示例
2014/01/23 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
js实现五星评价功能
2017/03/08 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
简单解析Django框架中的表单验证
2015/07/17 Python
python实现Floyd算法
2018/01/03 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
python实现猜拳小游戏
2020/04/05 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
Java软件工程师综合面试题笔试题
2013/09/08 面试题
中国文明网签名寄语
2014/01/18 职场文书
优秀毕业生自我鉴定
2014/01/19 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript