1小时内被全网疯转 29.8w 次,最终被
980 2023-04-03 03:06:59
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>02.分析Vue生命周期</title> </head> <body> <div id="app"> <button @click="add" id="btn">+</button> <h1 id="h1">当前页面求和为:{{sum}}</h1> <button @click="decrease">-</button> <button @click="death">销毁</button> </div> </body> <script src="../js/vue.js"></script> <script> //配置Vue关闭生产环境配置 Vue.config.productionTip = false; const vm = new Vue({ el: "#app", data() { return { sum: 0 } }, methods: { add() { console.log("你点了add按钮"); this.sum += 1 }, decrease() { this.sum -= 1 }, death() { this.$destroy() } }, //vue实例初始化前 beforeCreate() { console.log("------beforeCreate------"); console.log(this); console.log(this.sum) //undefined console.log(this.add) //undefined }, //vue实例初始化完毕 created() { console.log("---------created---------"); console.log(this); console.log(this.sum) //0 console.log(this.add) //function add(){} }, //Vue实例挂载之前:更新真实DOM之前(挂载前) // 此钩子中:1.所有对DOM节点操作,最终都不奏效 // 2.无法获得解析后的DOM,因为还没有Mount beforeMount() { console.log("-----------beforeMount---------------"); //1.所有对DOM节点操作,最终都不奏效 // let h1 = document.querySelector("#h1"); // h1.innerHTML = "Vue"; //2.无法获得解析后的DOM,因为还没有Mount }, //Vue更新完真实DOM(挂载完毕) /* 此钩子中: 1.可以操作DOM节点; 2.此时组件已经脱离初始化阶段,进入运行阶段, 一般在此阶段:开启定时器、发送网络请求等准备工作 */ mounted() { console.log("--------------mounted------------"); //1.可以操作DOM节点; let h1 = document.querySelector("#h1"); let btn = document.querySelector("#btn"); h1.innerHTML = "哈哈"; btn.innerHTML = "哈哈" console.log(h1); console.log(btn); }, //Vue实例将要更新页面 // 此钩子中:数据是新的,但是页面是旧的, 即:页面尚未和数据保持同步 beforeUpdate() { console.log("---------beforeUpdate-----------"); // console.log(this.sum); //1,显示出来的是1,但是页面呈现出来的是0 // debugger; }, // vue实例完成数据更新 // 此钩子中:数据是新的,页面也是新的。即:页面和数据保持同步了 updated() { console.log("--------updated------"); // console.log(this.sum); }, //Vue实例在销毁前 // 此钩子中: // 1. vm所有的data,methods,指令等等,都处于可用状态,马上要执行销毁过程, // 2. 一般在此钩子中:关闭定时器,取消订阅消息等收尾工作。 // 移除所有的数据监视,移除所有子组件和事件监听 beforeDestroy() { console.log("--------beforeDestroy------------"); console.log(this.sum); //可以获取 console.log(this.add); //可以获取 }, // Vue实例销毁完毕 destroyed() { console.log("----------destroyed-----------"); console.log("我已经移除了所有数据的监视,不会再更新页面了"); } }) </script></html>
vue实例初始化前:
1.此钩子中:无法通过vm访问到data里面的数据,和methods里面的方法
//vue实例初始化前 beforeCreate() { console.log("------beforeCreate------"); console.log(this); console.log(this.sum) //undefined console.log(this.add) //undefined },
vue实例初始化完毕:
1.此钩子中:可以通过vm访问到data里面的数据,和methods里面的方法
2.没有解析模板,数据没有展示在页面上
//vue实例初始化完毕 created() { console.log("---------created---------"); console.log(this); console.log(this.sum) //0 console.log(this.add) //function add(){} }
Vue实例挂载之前:
此钩子中:
1.所有对DOM节点操作,最终都不奏效
2.无法获得解析后的DOM,因为还没有Mount
beforeMount() { console.log("-----------beforeMount---------------"); //1.所有对DOM节点操作,最终都不奏效 let h1 = document.querySelector("#h1"); h1.innerHTML = "Vue"; },
Vue更新完真实DOM(挂载完毕)
此钩子中:1.可以操作DOM节点;2.此时组件已经脱离初始化阶段,进入运行阶段,一般在此阶段:开启定时器、发送网络请求等准备工作
/* 此钩子中: 1.可以操作DOM节点; 2.此时组件已经脱离初始化阶段,进入运行阶段, 一般在此阶段:开启定时器、发送网络请求等准备工作 */ mounted() { console.log("--------------mounted------------"); //1.可以操作DOM节点; /* let h1 = document.querySelector("#h1"); let btn = document.querySelector("#btn"); h1.innerHTML = "哈哈"; btn.innerHTML = "哈哈" console.log(h1); console.log(btn); */ },
Vue实例将要更新页面:
此钩子中:数据是新的,但是页面是旧的, 即:页面尚未和数据保持同步
//Vue实例将要更新页面 // 此钩子中:数据是新的,但是页面是旧的, 即:页面尚未和数据保持同步 beforeUpdate() { console.log("---------beforeUpdate-----------"); console.log(this.sum);//1,显示出来的是1,但是页面呈现出来的是0 debugger; },
点击add()事件后,呈现的页面
vue实例完成数据更新:
此钩子中:数据是新的,页面也是新的。即:页面和数据保持同步了
// vue实例完成数据更新 // 此钩子中:数据是新的,页面也是新的。即:页面和数据保持同步了 updated() { console.log("--------updated------"); console.log(this.sum); debugger },
点击add()事件后,呈现的页面
Vue实例在销毁前:
此钩子中:
移除所有的数据监视,移除所有子组件和事件监听
//Vue实例在销毁前 // 此钩子中: // 1. vm所有的data,methods,指令等等,都处于可用状态,马上要执行销毁过程, // 2. 一般在此钩子中:关闭定时器,取消订阅消息等收尾工作。 beforeDestroy() { console.log("--------beforeDestroy------------"); console.log(this.sum); console.log(this.add); },
Vue实例销毁完毕