浅析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 NaN和Infinity特殊值 [译]
Sep 20 Javascript
js 获取本地文件及目录的方法(推荐)
Nov 10 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
jQuery实现获取table中鼠标click点击位置行号与列号的方法
Oct 09 jQuery
vue父组件向子组件动态传值的两种方法
Nov 11 Javascript
判断div滑动到底部的scroll实例代码
Nov 15 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
Nov 27 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
Sep 07 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
Oct 16 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
Jun 24 Javascript
微信用户访问小程序的登录过程详解
Sep 20 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
Python递归函数定义与用法示例
2017/06/02 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
关于python中的xpath解析定位
2020/03/06 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
营销总经理的岗位职责
2013/12/15 职场文书
应急管理培训方案
2014/06/12 职场文书
资产运营委托书范本
2014/10/16 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
Python 如何实现文件自动去重
2021/06/02 Python
用php如何解决大文件分片上传问题
2021/07/07 PHP
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫