Vue组件的生命周期

79 阅读1分钟

每个 Vue 实例在被创建时都要经过一系列的初始化过程

生命周期分为三大阶段:初始化显示、更新显示、销毁Vue实例

  • 初始化阶段的钩子函数:

    beforeCreate() 实例创建前:数据和模板均未获取到
    
    created() 实例创建后: 最早可访问到 data 数据,但模板未获取到
    
    beforeMount() 数据挂载前:模板已获取到,但是数据未挂载到模板上。
    
    mounted() 数据挂载后:数据已挂载到模板中
    
    
  • 更新阶段的钩子函数:

    beforeUpdate() 模板更新前:data 改变后,更新数据模板前调用
    
    updated() 模板更新后:将 data 渲染到数据模板中
    
    
  • 销毁阶段的钩子函数:

    beforeDestroy() 实例销毁前
    
    destroyed() 实例销毁后    
    

    <div id='app'>
    	<App></App>
    </div>
    <script type="text/javascript" src="vue.min.js"></script>
    <script type="text/javascript">

    	Vue.component('Test',{
    		data(){
    			return {
    				msg:"hello world",
    				data:{}
    			}
    		},
    		template:`
			<div>
				<div>{{msg}}</div>
				<button @click = 'changerHanlder'>改变</button>

			</div>
    		`,
    		methods:{
    			changerHanlder(){
    				this.msg = this.msg +'尴尬';
    			}
    		},
    		beforeCreate:function(){
    			// 组件创建之前 
    			console.log(this.msg); //undefine
    		},
		created:function(){
			// 

			// $.ajax({
			// 	url:''
			// 	methods:'get',
			// 	success:(data)=>{
			// 		this.data = data;
			// 	}
			// })
			//组件创建之后
			console.log(this.msg);
			//使用该组件,就会调用created方法
			// 在created这个方法中可以操作后端的数据  数据驱动视图
			// 应用: 发起ajax请求

		},
		beforeMount:function(){
			// 挂载数据到 DOM之前会调用
			console.log(document.getElementById('app'));
		},
		mounted:function(){
			// 挂载数据到 DOM之后会调用 Vue作用以后的DOM  操作DOM
			console.log(document.getElementById('app'));
		},
		beforeUpdate:function(){
			// 在更新DOM之前 调用该钩子,应用:可以获取原始的DOM
			console.log(document.getElementById('app').innerHTML);
		},
		updated:function(){
			// 在更新DOM之后调用该钩子,应用:可以获取最新的DOM
			console.log(document.getElementById('app').innerHTML);

		},
		beforeDestroy:function(){
			console.log('beforeDestroy');
		},
		destroyed:function(){
			console.log('destroyed');
		},
		activated:function(){
			console.log('组件被激活了');
		},
		deactivated:function(){
			console.log('组件被停用了');
		}
    	})

    	var App = {
    		data(){
    			return {
    				isShow:true
    			}
    		},
    		// vue内置组件<keep-alive></keep-alive> 能在组件的切换过程中将状态保留在内存中。防止重复渲染DOM
    		template:`
			<div class = 'app'>

				<keep-alive>
					<Test v-if ='isShow'/>
				</keep-alive>
				<button @click = 'isShow =!isShow'>改变生死</button>

			</div>
    		`
    	}
    new Vue({
        el: '#app',
        data() {
            return {

            }
        },
        components: {
            App
        }
    });
    </script>