</!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<script src="./lib/vue-2.4.0.js"></script>
<style>
</style>
</head>
<body>
<!--
Vue生命周期
生命周期1:创建阶段
1.new Vue():执行代码var vm=new Vue({}),表示创建一个Vue对象(实例)
2.init(Event&Lifecycle):执行完以上代码后步入udoa对象初始化的前期阶段,表示通过以上代码我们创建了Vuejs对象,此时,再新建的对象身上,巨鳖了一些生命周期相关的函数(生命周期的钩子函数)和默认的时间,但是其他的相关的组件还没有被创建(data、methods、filter 等等都没有被创建出来)。
执行 Init(Events&Lifecycle)之后,钩子函数都被创建出来,马上调用生命周期函数beforeCreate,在该函数执行的时候,我们最常使用的组件 data 和methods 等,都还没有被创建出来
3.Init(injections&reactivity):
该阶段是对象初始化的后期阶段。执行Init(injections&reactivity)的方式是调用生命周期函数 created。在该函数中,data 和 methods 都已经被初始化好了
也就是说,如果要使用 methods 中的方法,或者是操作 data 中的数据,最早可以在 created 方法中来进行操作
4.Init 对象初始化阶段执行完毕后,通过对元素以及模板进行判断,系统开始编辑模板,将 Vue 代码中的指令进行执行,然后在内存中生成一个编辑好的模板字符串,最终将该模板字符串渲染为内存中的DOM。
但是此时集锦只是在内存中渲染好了模板,并没有将模板挂载到页面中去。该阶段执行完毕后,执行 beforeMount 方法
5.Create vm:该阶段是将内存中编译好的模板,替换到浏览器的页面中。该阶段执行完毕后,执行 mounted 方法。只要执行完了 mounted方法,就表示整个 Vue对象已经初始化完毕了,此时正式脱离创建阶段进入到运行阶段。如果要通过某些插件操作页面上的 DOM 节点,最早是要在 mounted 中进行。
生命周期 2:对象运行阶段
6.Virtual DOM:
该阶段会根据data中的最新数据,重新渲染出一份最新的DOM树,当最新的内存 DOM 树被更新了之后,会把最新的DOM树重新渲染到页面中去,这时候就完成了使用模型 Model 去渲染视图View 的过程
该阶段的执行会使用到两个函数beforeUpdate和updated,这两个函数会根据 data 数据的变化,可重复的执行多次
当beforeUpdate方法执行的时候,页面中的显示还是以前的数据,但是data中保存的是更新后的新数据,页面此时还没有和最新的数据保持同步。
updated函数执行的时候,页面和data数据已经保持同步了,都是最新的数据了
生命周期 3:对象销毁阶段
7.Teardown(拆卸),该阶段为对象销毁的阶段,当对象实例运行完毕后,如果达到了对象销毁的条件,执行beforDestroy函数,该函数的执行正式标志着对象从运行阶段进入到了销毁的阶段。
当beforDestroy函数执行的时候,对象身上所有的组件data、methods、filter、directive等组件都还处于可用状态(因为对象只是步入到了销毁的阶段,还没有销毁),该函数执行完毕后,对象正式销毁。
8.Destroyed:该阶段为对象销毁后的阶段。该阶段会执行destroyed函数,当该函数执行的时候,对象已经被销毁了,里面的data、methods等相应的组件也不能使用了。
以上生命周期中使用的所有的函数,就是Vuejs生命周期中最重要的钩子函数。
Vuejs生命周期中的钩子函数函数解析
beforeCreate、created
beforeMount、mounted
beforeUpdate、updated
beforeDestroy、destroyed
-->
<div id="app">
<p id="msg">{{str1}}</p>
请输入信息:<input type="text" v-model="str1">
</div>
<script>
var vm = new Vue({
el:"#app",
data:{
str1:"aaa",
},
methods:{
showInfo(){
alert(this.str1+"showInfo methods");
}
},
//vuejs生命周期中第一个钩子函数,表示再实例在完全被创建之前,会执行该函数
//注意:beforeCreate函数执行的时候,data和methods中的数据还没有被初始化出来
beforeCreate(){
//弹出结果是undifind,表示data中的函数没有被初始化
// alert(this.str1);
//结果:没有执行该函数,表示methods中的函数没有被初始化
// this.showInfo();
},
//data和methods中的数据已经被初始化
//注意:此时还没有编辑模板
//如果需要使用data和methods中的方法,最早可以在created中使用
created(){
//弹出结果是aaa,表示data中的函数没有被初始化
// alert(this.str1);
//结果:执行了该函数,表示methods中的函数没有被初始化
// this.showInfo();
},
//该函数的执行,表示模板已经再内存中编辑成功了,但是还没有将模板渲染到页面中
beforeMount(){
// var msg=document.getElementById("msg").innerHTML;
//弹出结果是{{str1}},页面还没有变成aaa
// alert(msg);
},
//该函数表示内存中的模板。已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了
//mounted函数是Vuejs对象创建期间的最后一个生命周期函数,当我们执行完mounted方法之表示实例已经被完全创建好了
mounted(){
// var msg=document.getElementById("msg").innerHTML;
//弹出的结果是aaa
// alert(msg);
},
//以下测试对象运行中的两个函数
//在更新数据前,执行beforeUpdate函数
//执行改函数的时候页面中显示的还是上一次的旧数据,此时data中的数据是最新的,页面尚未和最新的data中的数据保持同步
beforeUpdate(){
// var msg=document.getElementById("msg").innerHTML;
//页面从aaa修改为aaa1的时候,弹出的信息是aaa
// alert(msg);
},
//执行该函数的时候,页面和data中的数据保持一致了
updated(){
var msg=document.getElementById("msg").innerHTML;
//页面从aaa修改为aaa1的时候,弹出的信息是aaa1
alert(msg);
},
//执行该函数说明对象处于准备销毁阶段,对象中的组件再此函数中是仍然可以使用的
beforeDestroy(){
},
//执行该函数说明对象已经销毁完毕了,对象中的组件(data,methods)随着对象销毁也不能使用了
destroyed(){
}
})
</script>
</body>
</html>