浅析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判断IE6等浏览器的代码
Apr 05 Javascript
用jquery实现点击栏目背景色改变
Dec 10 Javascript
Javascript中数组sort和reverse用法分析
Dec 30 Javascript
jQuery中noConflict()用法实例分析
Feb 08 Javascript
理解javascript封装
Feb 23 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
Oct 16 Javascript
javascript 组合按键事件监听实现代码
Feb 21 Javascript
js模拟微博发布消息
Feb 23 Javascript
ReactNative页面跳转Navigator实现的示例代码
Aug 02 Javascript
vue刷新和tab切换实例
Feb 11 Javascript
微信小程序云开发如何使用云函数生成二维码
May 18 Javascript
JS实现水平遍历和嵌套递归操作示例
Aug 15 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
mysql时区问题
2008/03/26 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
Python 除法小技巧
2008/09/06 Python
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
python正则表达式re模块详细介绍
2014/05/29 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
编程实现去掉XML的重复结点
2014/05/28 面试题
民间个人借款协议书
2014/09/30 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
降价通知函
2015/04/23 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
MySql数据库 查询时间序列间隔
2022/05/11 MySQL