浅析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 相关文章推荐
JQUERY THICKBOX弹出层插件
Aug 30 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
Apr 29 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
May 05 Javascript
AngularJS实现在ng-Options加上index的解决方法
Nov 03 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
JS批量替换内容中关键词为超链接
Feb 20 Javascript
vue实现移动端图片裁剪上传功能
Aug 18 Javascript
react实现一个优雅的图片占位模块组件详解
Oct 30 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
May 02 Javascript
js实现删除li标签一行内容
Apr 16 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递归使用示例(php递归函数)
2014/02/14 PHP
php计算一个文件大小的方法
2015/03/30 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
php查询内存信息操作示例
2019/05/09 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
python中sets模块的用法实例
2014/09/30 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
中学家长会邀请函
2014/02/03 职场文书
自行车广告词大全
2014/03/21 职场文书
个人贷款担保书
2014/04/01 职场文书
目标责任书范文
2014/04/14 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python