浅析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陷阱 一不小心你就中招了(字符运算)
Nov 10 Javascript
javascript中bind函数的作用实例介绍
Sep 28 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
浅析Bootstrip的select控件绑定数据的问题
May 10 Javascript
微信小程序 rpx 尺寸单位详细介绍
Oct 13 Javascript
深入理解javascript函数参数与闭包
Dec 12 Javascript
js遍历json的key和value的实例
Jan 22 Javascript
JS和canvas实现俄罗斯方块
Mar 14 Javascript
微信小程序引入Vant组件库过程解析
Aug 06 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 Javascript
关于JavaScript中异步/等待的用法与理解
Nov 18 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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Python实现壁纸下载与轮换
2020/10/19 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
社团2014年植树节活动总结
2014/03/11 职场文书
宣传工作经验材料
2014/06/02 职场文书
宣传活动总结范文
2014/07/01 职场文书
学校社会实践活动总结
2014/07/03 职场文书
干部对照检查材料范文
2014/08/26 职场文书
银行给客户的感谢信
2015/01/23 职场文书
小学教师个人总结
2015/02/05 职场文书
会计工作能力自我评价
2015/03/05 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
《社戏》教学反思
2016/02/22 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技