生命周期函数
vue框架内部提供的一系列函数,主要用于vue创建的实例在挂载到页面以及从页面销毁这一过程中,我们要进行一些操作时所使用的函数。
所有生命周期函数
beforeCreate
在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用
...
<body>
<div id="app">{{name}}</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: "#app",
data: {
name: "生命周期函数",
},
mthods: {
sayHi() {
console.log("hi");
},
},
beforeCreate() {
console.log(this.sayHi); // undefined
console.log(this.name); // undefined
console.log("beforeCreate");
},
});
</script>
</body>
...
created
在实例创建完成后被立即调用。已经可以获取实例的data、methods、watch。但是不能获取实例根节点
...
<body>
<div id="app">{{name}}</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: "#app",
data: {
name: "生命周期函数",
},
methods: {
sayHi() {
return "hi";
},
},
created() {
console.log(this.name); // 生命周期函数
console.log(this.$el); // undefind
console.log(this.sayHi()); // hi
},
});
</script>
</body>
...
beforeMount
这一步生成虚拟dom,准备将其渲染到页面,但还未渲染
<body>
<div id="app">{{name}}</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: "#app",
data: {
name: "生命周期函数",
},
methods: {
sayHi() {
return "hi";
},
},
beforeMount() {
console.log(this.name); // 生命周期函数
console.log(this.$el);
/*
<div id="app">
{{name}}
</div>
*/
console.log(this.sayHi()); // hi
console.log(this.$refs.demo); // undefind
},
});
</script>
</body>
mounted
将虚拟DOM根据el挂载到对应HTML中,将虚拟dom渲染到页面,已经完成
<body>
<div id="app">
{{name}}
<p>dmeo</p>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: "#app",
data: {
name: "生命周期函数",
},
methods: {
sayHi() {
return "hi";
},
},
mounted() {
console.log(this.name); // 生命周期函数
console.log(this.$el);
/*
<div id="app">
{{name}}
</div>
*/
console.log(this.sayHi()); // hi
console.log(this.$refs.demo); // <p>dmeo</p>
},
});
</script>
</body>
beforeUpdate
当data中的数据更新后,虚拟DOM更新前
<body>
<div id="app">
<p id="p">{{name}}</p>
<button @click="update">更新</button>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: "#app",
data: {
name: "生命周期函数",
},
methods: {
update() {
this.name = "update";
},
},
beforeUpdate() {
console.log(document.getElementById("p").innerText); //生命周期函数
console.log(1);
},
});
</script>
</body>
updated
数据更新完毕,且虚拟dom完成在页面的渲染之后执行
<body>
<div id="app">
<p id="p">{{name}}</p>
<button @click="update">更新</button>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: "#app",
data: {
name: "生命周期函数",
},
methods: {
update() {
this.name = "update";
},
},
updated() {
console.log(document.getElementById("p").innerText); //update
console.log(1);
},
});
</script>
</body>
bdeforeDestroy
当调用vm.$destroy()销毁组件时,销毁前使用,这时data、methods、虚拟dom都可以使用
<body>
<div id="app">
<p id="p">{{name}}</p>
<button @click="update">卸载</button>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
let app = new Vue({
el: "#app",
data: {
name: "生命周期函数",
},
methods: {
update() {
this.$destroy();
},
},
beforeDestroy() {
console.log(this.name); //生命周期函数
console.log(this.$el); //<div id="app">…</div>
console.log(this.update);
/* ƒ update() {
this.$destroy();
}*/
},
});
</script>
</body>
destroyed
彻底销毁完毕时使用
小结
上述就是官方规定的生命周期函数,但大体来看生命周期函数的特点就是会在实例的某个阶段自动调用,这样看watch,computed也应该算。
常见使用场景
个人使用过的
created
- ajax请求
mounted
- 挂载元素内dom节点的获取
updated
- 任何数据的更新,如果要做统一的业务逻辑处理