先上一张官网生命钩子图例
明确生命周期钩子的意义:同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。(官网照搬)
贴一段自己测试的示例
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<div id = "app">
v-modelInput:<input v-model = "pre_value"/><br/>
v-bindInput:<input :value = "pre_value"/><br/>
v-onInput:<input @click = "pre_function" type = "button" value = "点击触发pre_function函数"/><br/>
<input type = "button" value = "$销毁" onclick = "df()"/>
<input type = "button" value = "$挂载" onclick = "mf()"/>
</div>
</body>
</html>
<script>
var app_vm = new Vue({
el: '#app',
data : {
pre_value : 'Hi Vue!',
},
methods : {
pre_function : function (){window.alert('Hi pre_function~~')}
},
beforeCreate : () => {
console.log('beforeCreate_process');
},//创建实例前,
created : () => {
console.log('created_process');
},//创建实例后
beforeMount : () => {
console.log('beforeMount_process');
},//挂载前
mounted : () => {
console.log('mounted_process');
},//挂载后
beforeUpdate : () => {
console.log('beforeUpdate_process');
},//数据修改前
updated : () => {
console.log('updated_process');
},//数据修改后
beforeDestroy : () => {
console.log('beforeDestroy_process');
},//vm对象销毁前
destroyed : () => {
console.log('destroyed_process');
}//vm对象销毁后
});
//
var df = () => {
app_vm.$destroy();
};//销毁
var uf = () => {
app_vm.$forceUpdate();
};//强制更新
var mf = () => {
app_vm.$mount();
};//挂载
</script>
页面刚初始化时候的控制台(证明触发了beforeCreate,created,beforeMount,mounted四个钩子)
点击销毁按钮后(证明触发了beforeDestroy,destroyed两个钩子,并且无论点击多少次都不会再次触发beforeDestroy,destroyed钩子),注意最初的官网贴图,vm.$destroy()造成的影响是
1.解除绑定:解除的是谁的绑定?是vm对象与dom对象之间的绑定(eg:解除绑定后v-bindInput中的值不会再随着v-modelInput中的值的改变而改变)
2.销毁子组件(PlaceHolder!!!)
3.销毁事件监听(eg:无论点击多少次都不会再次触发beforeDestroy,destroyed钩子)
备注:vm.$destroy()并不会把已渲染的dom销毁掉(此时一定要紧抠'解除绑定'四字真言)
[未点击销毁按钮]点击挂载按钮后(证明触发了beforeMount,mounted两个钩子)
[已点击销毁按钮]点击挂载按钮后(证明触发了beforeMount,mounted两个钩子),随后v-modelInput中值时不再触发beforeUpdate,updated两个钩子
同注意最初的官网贴图,vm.$mount()造成的影响是
1.虚拟DOM重新渲染并应用更新
总结:根据官网生命周期钩子示例,当外部额外调用vm.$mount()或vm.$destroy()时,并非会彼此造成影响(不要误认为vm.$destroy()销毁后便无法再进行vm.$mount()挂载),初学Vue,如有不对之处,欢迎大家评论指出~