Vuejs之路之--对实例生命周期的理解
来源:互联网 发布:linux的shell用法 编辑:程序博客网 时间:2024/06/06 18:43
用Vue框架,熟悉它的生命周期可以让开发更好的进行。
首先先看看官网的图,详细的给出了vue的生命周期:
它可以总共分为8个阶段:
beforeCreate(创建前),
created(创建后),
beforeMount(载入前),
mounted(载入后),
beforeUpdate(更新前),
updated(更新后),
beforeDestroy(销毁前),
destroyed(销毁后)
然后用一个实例的demo 来演示一下具体的效果:
<div id=app>{{a}}</div>
<script>
var myVue = new Vue({
el: "#app",
data: {
a: "Vue.js"
},
beforeCreate: function() {
console.log("创建前")
console.log(this.a)
console.log(this.$el)
},
created: function() {
console.log("创建之后");
console.log(this.a)
console.log(this.$el)
},
beforeMount: function() {
console.log("mount之前")
console.log(this.a)
console.log(this.$el)
},
mounted: function() {
console.log("mount之后")
console.log(this.a)
console.log(this.$el)
},
beforeUpdate: function() {
console.log("更新前");
console.log(this.a)
console.log(this.$el)
},
updated: function() {
console.log("更新完成");
console.log(this.a);
console.log(this.$el)
},
beforeDestroy: function() {
console.log("销毁前");
console.log(this.a)
console.log(this.$el)
console.log(this.$el)
},
destroyed: function() {
console.log("已销毁");
console.log(this.a)
console.log(this.$el)
}
});
</script>
运行后,查看控制台,
得到这个:
然后再methods 里面添加一个change方法:
<div id=app>{{a}}
<button v-on:click="change">change</button>
</div>
点击按钮之后出现的是:
具体代码如下还有个人的理解:
var vm = new Vue({el:"#container",data:{folder:"Vuejs的生命周期究竟是什么样子?我真的很想知道!"},methods:{changeData:function(){this.folder = "马上就知道了",this.$el = document.getElementById("dede")}},beforeCreate:function(){console.log("创建前")console.log(this)/*返回的就是一个实例对象,为什么呢,因为根据官网生命周期图示,此时已经完成了Vue实例的初始化工作,this指向的是实例对象本身,所以一定会返回值*/console.log(this.folder)/*undefined,这个为啥呢?同样的也是根据官网所给出的生命周期图示, 此时还不没监控data属性,所以就更别提里面的值了*/},created:function(){console.log("创建后");console.log(this.folder);/*"Vuejs的生命周期究竟是什么样子?我真的很想知道!",因为根据官网生命周期的图示,创建完成势力后,此时已经监控到data属性变化了,当然也就返回真值啦*/console.log(this.$el)/*undefined,还是同上,在这个阶段,势力还没检测到有没有el属性,所以也就无法识别$el了*/},beforeMount:function(){console.log("mount(挂载)之前");console.log(this.folder);/*返回预设值,理由同上*/console.log(this.$el)/*挂在开始之前被调用,(顾名思义还没挂在上嘛,当然不知道根元素在哪里,也就也就没法渲染和转译啦)返回真的实例所挂载的dom对象,还是同上,因为在这个阶段之前,已经检测到了有el属性所以也就理所当然的返回真值啦。但此时返回的还是纯生的DOM对象,{{folder}}并没有被转义,这就更加说明了实例还没挂载上呢*/},mounted:function(){console.log("挂载之后");console.log(this.folder);/*返回预设值,理由同上*/console.log(this.$el)/*挂载之后,才回调用,既然已经挂载上了,那也就知道根元素在哪里了,当然也就能返回正确的值啊*/},beforeUpdate:function(){console.log("更新之前");console.log(this.folder);/*数据更新时调用,也就是说这个回到函数的触发是在数据更新的时候运行的,在这里就是点击事件发生的时候,因为点击的时候改变了数据的值,但是*/console.log(this.$el)/*返回的是新的DOM对象,更新过后的*/},updated:function(){console.log("更新之后");console.log(this.folder);console.log(this.$el)/*数据更新后调用,由于数据更改导致的虚拟 DOM 重新渲染和打补丁,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之*/},beforeDestroy:function(){console.log("销毁之前");/*实例销毁之前调用。在这一步,实例仍然完全可用,怎么让实例销毁呢?*/console.log(this.folder);console.log(this.$el)},destroyed:function(){console.log("销毁之后");/*Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。*/console.log(this.folder);console.log(this.$el)}})
这就是vue的生命周期,很简单吧。
- Vuejs之路之--对实例生命周期的理解
- vuejs之v-for的理解
- vuejs项目运行的探索之路
- vuejs项目运行的探索之路
- vuejs项目运行的探索之路
- Vue之实例的生命周期
- Vuejs之路之--过滤器的那些事
- Vuejs之路之--style和class的绑定
- Vuejs之路之--子父之间的通信
- Activity生命周期之理解
- Vuejs之路之--模板语法()
- vuejs之路之--条件渲染
- Vuejs之路之--循环渲染
- vuejs之路之--事件绑定
- Android之Activity生命周期的理解
- android学习之Activity的生命周期理解
- vuejs组件开发之手风琴菜单组件实例
- Vuejs组件之slot内容分发实例详解
- jetson tx2开箱上电
- QSettings 读写注册表
- 原生ajax的封装
- 关于学习ajax中的contentType属性笔记
- Python--反射/自省
- Vuejs之路之--对实例生命周期的理解
- 【c】链表的操作!!!
- c++ 数组 有序数组插入 归并排序思想
- JDK 配置(ubuntu)
- hdu 1003
- 距离之和最小 V3
- GitHub学习(GitHub命令用法解释)
- 不要使用sun.misc.BASE64
- UVA540 TeamQueue【map+queue】