vue之生命周期

每一个组件或者实例都会经历一个完整的生命周期,总共分为三个阶段:初始化、运行中、销毁。
初始化阶段: beforeCreate created beforeMount mounted
运行中阶段: beforeUpdate updated
销毁阶段: beforeDestroy destroyed
在这里插入图片描述


    <div id="app"> 
        <my-component></my-component>
    </div>
    <!--定义组件的模板结构-->
    <template id="my-component">
        <div>
            <h1 id="title">hello---------{{msg}}</h1>
            <p><input type="text" v-model="msg"></p>
        </div>
    </template>
//初始化阶段
//1.实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期   
 new Vue({}).$mount("#app");
//2.实例化之后,内部会做一些初始化事件与生命周期相关的配置 
 Vue.component("my-component",{
            template:"#my-component",
            data(){
                return {
                    msg:1
                }
            },
            //3.执行beforeCreate钩子函数,这个时候,数据还没有挂载到,只是一个空壳,
            //无法访问到数据和真实的dom,一般不做操作
            beforeCreate(){
                console.log("beforeCreate....")
                console.log(this.msg,document.getElementById("title"))
            },
            //4.执行created函数,这个时候已经可以使用到数据,也可以更改数据,
            //在这里同步更改数据不会触发updated函数,一般可以在这里做初始数据的获取。 
            //通常在此钩子函数做异步ajax,绑定初始化事件  
            created(){
                // this.msg = 222222222222222
                console.log("created...")
                console.log(this.msg,document.getElementById("title"))
            },
            //5.接下来的过程,就是组件或者实例去查找各自的模板,让后将其编译成虚拟dom,即将放入render函数中做初始化渲染的操作。
            //6.执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,
            //马上就要渲染,在这里也可以更改数据,不会触发updated,
            //这是在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始化数据的获取
            beforeMount(){
                console.log("beforeMount....")
                console.log(this.msg,document.getElementById("title"))
            },
            //7.执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情...
            mounted(){
                console.log("mounted.....")
                console.log(this.msg,document.getElementById("title"))
            },
            //8.运行时钩子函数初始化阶段是不会主动执行的
            //只有dom挂载完毕了,然后再去当数据发生变化的时候,beforeUpdate这个钩子函数才会执行
            beforeUpdate(){
                console.log("beforeUpdate....")
            },
            // 9、这个钩子函数里面dom获取的数据内容是更新后的内容
            // 生成新的虚拟dom,与上一次的虚拟dom结构进行对比,比较出来差异
            // 再去进行真实dom的重新渲染操作
            updated(){
                console.log("updated...");
                console.log(this.msg,document.getElementById("title").innerHTML)
                
            },
            // 10、当组件销毁的时候就会触发执行
            // 这个钩子函数代表销毁之前,可以做一些善后
            
            beforeDestroy(){
                console.log("beforeDestroy...");
                clearInterval(this.timer)
            },
            // 11、组件一旦被销毁了,组件的dom结构还是存在的
            // 只是组件
            destroyed(){
                console.log("destroyed...");
                
            }
        })

       
        

轮播图实例

<div id="app">
        <my-banner></my-banner>
    </div>

    <!--创建模板-->
    <template id="my-banner">
        <div class="swiper-container">
            <div class="swiper-wrapper">
                <div 
                    class="swiper-slide"
                    v-for="banner in banners"
                >
                    <img width="100%" :src="banner.image" alt="">
                </div>
            </div>
        </div>
    </template>
    <script>
        //创建组件
        Vue.component("my-banner",{
            template:"#my-banner",
            data(){
                return {
                    banners:[],
                }
            },
            created(){
                this.$http.get("./banners.json").then(res=>{ //1000s之后
                    this.banners = res.data.bannerList
                })
            },
              //当数据发生改变的时候,引发虚拟dom的对比,虚拟dom对比完成后,再去渲染真实的dom结构
              //当真实的dom结构渲染完成后,内部才会执行updated钩子函数
              //数据改变了,然后swiper-slide这几个真实dom生成好了之后,才会进入到updated这个钩子函数里面去。
                
         	updated(){
                new Swiper(".swiper-container",{
                    loop:true 
                })
            }
        })

        new Vue({
            el:"#app"
        })
    </script>

鼠标拖动图片可以实现图片的切换

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值