vue生命周期钩子函数

<template>
<div>
<h2>this is from C.vue</h2>
</div>
</template> <script>
export default {
name: 'C',
data () {
return {
msg: 'hello C.cue',
moneyInit: 100
}
},
computed: {
money () {
return this.moneyInit * 100
}
},
methods: {
test () {
console.log('this is a test')
}
},
beforeCreate () {
console.log('beforeCreate') // this的结果是VueComponent
console.log('this:', this)
// beforeCreate时 data,computed都不能访问,为undefined
console.log('this.msg:', this.msg, 'this.money:', this.money)
},
created () {
console.log('created')
// created时,data,computed,methods均能访问
console.log('this.msg:', this.msg, 'this.money:', this.money)
this.test()
}
}
</script> <style lang="scss" scoped> </style>
<template>
<div id="app">
<div @click="changeMsg">this is from app.vue {{msg}}</div>
<router-link :to="{name:'A'}">to A Page</router-link>
<router-link :to="{name:'B'}" tag="div">to B Page</router-link>
<router-link :to="{name:'C'}">to C Page</router-link>
<router-view/>
</div>
</template> <script>
export default {
name: 'App',
data () {
return {
msg: 'hello'
}
},
methods: {
changeMsg () {
if (this.msg === 'hello') {
this.msg = 'today'
} else {
this.msg = 'hello'
}
}
},
created () {
// created 时 this.$el还不能访问,DOM还未挂载
console.log('created function from App.vue, this.$el:', this.$el)
},
beforeMount () {
// 注意beforeMount的this.$el也为undefined
console.log('beforeMount function from App.vue, this.$el:', this.$el)
},
mounted () {
// mounted 此时this.$el能访问,vue实例挂载到了DOM上
console.log('mounted function from App.vue, this.$el:', this.$el)
},
// data发生变化,即dom发生变化
beforeUpdate () {
console.log('beforeUpdate function from App.vue')
} }
</script> <style>
#app{
display: flex;
flex-direction: column;
align-items: center;
}
</style>
注意几点:
1. created与mounted都常见于ajax请求,前者如果请求响应时间过长,容易白屏
2. mounted不能保证所有子组件都一起被挂载。如果要等到整个视图更新完毕,使用vm.$nextTick()
nextTick:在vue中,用于处理DOM更新操作。vue里面有个watcher,用于观察数据变化,然后更新DOM,vue并不是每次数据更新都会触发DOM更新,而是将这些操作缓存在一个队列。在一个事件循环结束后,刷新队列,统一执行DOM更新。
vm.$nextTick([callback])将回调延时到下次DOM更新循环结束之后执行。在修改数据后使用这个方法,它会获取更新后的DOM。它的this会绑定到调用的实例上,这是与Vue.nextTick唯一不同的地方。
<template>
<div>
<div ref="tag">{{msg}}</div>
<div>msg1:{{msg1}}</div>
<div>msg2:{{msg2}}</div>
<button @click="changeMsg">click it</button>
</div>
</template> <script>
export default {
name: 'C',
data () {
return {
msg: '',
msg1: '',
msg2: ''
}
},
methods: {
changeMsg () {
this.msg = 'hello'
// this.msg1没有立即更新,没能获取到更新后的DOM
this.msg1 = this.$refs.tag.innerHTML
// this.msg2成功渲染,成功获取到了更新后的DOM
this.$nextTick(() => {
this.msg2 = this.$refs.tag.innerHTML
})
}
}
}
</script> <style lang="scss" scoped> </style>
参考链接:https://juejin.im/entry/5aee8fbb518825671952308c
vue生命周期钩子函数的更多相关文章
- Vue生命周期 钩子函数和组件传值
Vue生命周期 钩子函数 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等. 同时在这个过程中也会运行一 ...
- 关于 vue 生命周期 钩子函数 事件
vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染->更新->渲染.卸载等一系列过程,我们称这是vue的生命周期. 通俗的将就是vue实例从创建到销毁 ...
- 对vue生命周期/钩子函数的理解
对于实现页面逻辑交互等效果,我们必须知晓vue的生命周期,才能愉快的玩耍,知道我们写的东西应该挂载到哪里,vue官方给出的api讲解的那叫一个简单啊,如下: 所有的生命周期钩子自动绑定this上下文到 ...
- vue生命周期 钩子函数
首先,1.x和2.x的生命周期钩子对比: 钩子函数的树状图,红色的是我们可以利用的函数,绿色的是函数解析,蓝色的是函数执行时机 <!DOCTYPE html> <html> & ...
- vue 生命周期钩子函数
实例中的生命周期钩子可以分为以下8种情况: beforeCreate: 实例刚被创建,vue所有属性都还不存在 created: 实例创建完成,但$el还不存在 beforeMount:挂载之前 mo ...
- VueRouter和Vue生命周期(钩子函数)
一.vue-router路由 1.介绍 vue-router是Vue的路由系统,用于定位资源的,在页面不刷新的情况下切换页面内容.类似于a标签,实际上在页面上展示出来的也是a标签,是锚点.router ...
- vue生命周期钩子函数详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35585701/article/ ...
- Vue生命周期钩子函数加载顺序的理解
Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的过程,就是生命周期 ...
- vue之生命周期钩子函数之运用
一.什么是生命周期钩子函数: 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行 ...
随机推荐
- 同时使用antd和css module
同时编译antd和css module,需要设置两次less识别. { test: /\.less$/, exclude: path.resolve(__dirname, './node_module ...
- 如何避免OOM
一.减小对象的内存占用 1)使用更加轻量的数据结构 例如,我们可以考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构. ArrayMap和HashMap主要不同之处在于 ...
- Java_并发工具包 java.util.concurrent 用户指南(转)
译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html.本 ...
- QT杂记(网上资料整理而成)
1.新建工程时,Qwidget和Qdialog和Qmianwindow三者的区别? QWidget是所有图形界面的基类QMainWindow是一个提供了菜单.工具条的程序主窗口QDialog是对话框. ...
- pytorch安装(使用pip3装到conda环境下)
之前在windows上使用pip3的方式安装过pytorch,虽然偶尔也会HTTP Error,安装失败,但是基本还是可以安装成功的.上 这一次在ubuntu上装了anaconda,想着之后的库都用c ...
- MacBookPro磁盘空间不够
256G的SSD还是快被占满了,剩余12G,本来一切运行正常. 要往U盘里拷点资料,突然电脑就罢工了,cleanMyMac 显示磁盘容量剩余 1.8G. finder 罢工,无法重启,无法强退. 无法 ...
- JAVA生成(可执行)Jar包的全面详解说明 [打包][SpringBoot][Eclipse][IDEA][Maven][Gradle][分离][可执行]
辛苦所得,转载还请注明: https://www.cnblogs.com/applerosa/p/9739007.html 得空整理了关于java 开发中,所有打包方式的 一个操作方法, 有基于ID ...
- ide phpStorm 配置PHP路径并本地执行PHP脚本
1.打开设置(File - Settings) 2. 3. 4.到需要执行脚本的文件处,右击 - Run 5.如果本地还未安装PHP,可以下载Xampp,并将PHP目录新增至系统环境变量Path处,重 ...
- 查看历史会话等待事件对应的session信息
此处以enq: TX - row lock contention等待时间为例. 查看snap_id对应时间 select to_char(s.startup_time,'dd Mon "at ...
- 2018-2019-2 网络对抗技术 20165225 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165225 Exp3 免杀原理与实践 一.实验说明 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),vei ...