浅析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 相关文章推荐
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
javascript查询字符串参数的方法
Jan 28 Javascript
通过JS判断联网类型和连接状态的实现代码
Apr 01 Javascript
JavaScript jquery及AJAX小结
Jan 24 Javascript
轻松实现js选项卡切换效果
Sep 24 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
Node.js简单入门前传
Aug 21 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
Nov 28 Javascript
angularjs实现时间轴效果的示例代码
Nov 29 Javascript
详解jQuery如何实现模糊搜索
May 10 jQuery
vue 指令和过滤器的基本使用(品牌管理案例)
Nov 04 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
Apr 21 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中输出转义JavaScript代码的实现代码
2011/04/22 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
jQuery操作cookie
2016/08/08 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
Python可变参数函数用法实例
2015/07/07 Python
详解Django中的过滤器
2015/07/16 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
python缩进长度是否统一
2020/08/02 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
高一数学教学反思
2014/02/07 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
小学体育组工作总结
2015/08/13 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
python实现简易名片管理系统
2021/04/11 Python
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
Golang二维数组的使用方式
2021/05/28 Golang
SQL Server Agent 服务无法启动
2022/04/20 SQL Server