浅析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 相关文章推荐
禁止IE用右键的JS代码
Dec 30 Javascript
在Html中使用Requirejs进行模块化开发实例详解
Apr 15 Javascript
json传值以及ajax接收详解
May 24 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
Bootstrap table表格简单操作
Feb 07 Javascript
jQuery实现可拖动进度条实例代码
Jun 21 jQuery
详解webpack之scss和postcss-loader的配置
Jan 09 Javascript
vscode中vue-cli项目es-lint的配置方法
Jul 30 Javascript
深入浅析angular和vue还有jquery的区别
Aug 13 jQuery
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
JavaScript如何借用构造函数继承
Nov 06 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提交form表单
2015/07/01 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
JavaScript 中的事件教程
2007/04/05 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
python实现给数组按片赋值的方法
2015/07/28 Python
python生成验证码图片代码分享
2016/01/28 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python psutil模块使用方法解析
2019/08/01 Python
python实现广度优先搜索过程解析
2019/10/19 Python
python 如何引入协程和原理分析
2020/11/30 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
linux面试相关问题
2012/08/11 面试题
最新创业融资计划书
2014/01/19 职场文书
工商干部先进事迹
2014/05/14 职场文书
社区护士演讲稿
2014/08/27 职场文书
世界红十字日活动总结
2015/02/10 职场文书
统招统分证明
2015/06/23 职场文书
清明扫墓感想
2015/08/11 职场文书