vue生命周期: 一个vue对象从创建到销毁所经历的整个过程, 在这个过程中, vue会在特定的时刻主动调用一些函数, 这些函数叫做生命周期函数 或 生命周期钩子
<body>
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
<button @click="()=>{obj.age++}">{{obj.age}}</button>
</div>
<script>
var vm = new Vue({
el: '#myApp', // 根标签
data: { obj: {age:20} }, // 动态数据
methods: { }, // 自定义函数
filters: {}, // 过滤器
computed: {}, // 计算属性
watch: {}, // 监视器
// vue中除了以上几个常用字段之外,还提供了以下8个生命周期函数
beforeCreate() {
// beforeCreate调用时, 栈内存已经确定了一个内存地址,用于存放这vue对象, 但此时,vue对象虽然有内存地址,但还未创建完成, 里边的数据还未定义, 所以,this有值, this.obj没值
console.log(1, "vue对象还没有创建", this, this.obj)
},
created() {
// 一般在这里发起ajax请求, 得到数据, 赋值到data中
console.log(2, "vue对象已经创建", this, this.obj)
fetch("./goodList.json").then(res=>{
return res.json()
}).then(res=>{
console.log(res)
})
},
beforeMount() {
console.log(3, "vue中的数据还没有渲染到视图上")
},
mounted() {
console.log(4, "vue中的数据已经渲染到视图上")
},
beforeUpdate() {
console.log(5, 'data数据更新之前')
},
updated() {
console.log(6, 'data数据更新之后')
},
beforeDestroy() {
// 如果一个页面中有window的事件监听, 或计时器, 一定要在销毁时停掉
console.log(7, "vue对象将要被销毁")
},
destroyed() {
console.log(8, "vue对象已经被销毁")
}
// 总结: vue的生命周期钩子
// beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDeatroy, destroyed
})
// 2秒后, 销毁vue对象
setTimeout(() => {
vm.$destroy()
}, 2000);
setTimeout(() => {
// vue对象销毁后, 依然可以调用, 但更新的生命周期函数不存在了,无法调用
console.log(vm, vm.obj.age)
}, 3000);
</script>
</body>