10 生命周期(重要)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .red{
            color: red;
        }
    </style>
</head>
<body>
<div id="app">
    <App></App>
</div>
<script src="./vue.js"></script>
<script>
    // 执行顺序beforeMount》created》mounted
    // computed: 
        // 1.Props,methods,data和computed的初始化都是在beforeCreated和created之间完成的。
        // 2.当Vue实例中的data属性变化并被computed中的计算属性(方法)引用时,所有的相关计算属性又会执行一次。
    // beforeCreate:组件创建之前执行的函数,拿不到组件数据
    // created:组件创建完成执行的函数,可以拿到组件数据
    // beforeMount
    // mounted
    // beforeUpdate
    // updated

    //配合keep-alive
    // activated 激活
    // deactivated 停用

    // beforeDestroy
    // destroyed

    Vue.component('test',{
        data(){
            return{
                msg:'walter',
                isRed:false
            }
        },
        methods:{
            handleClick(){
                this.msg = 'lizzy';
                this.isRed = !this.isRed
            }
        },
        template:`
            <div>
                <h3 :class="{red:isRed}">{{msg}}</h3>
                <button @click="handleClick">改变</button>
            </div>

            `,
        beforeCreate(){
            console.log('组件创建之前')
        },
        created(){
            //非常重要的事情,再此时发送ajax 请求后端的数据
            console.log('组件创建完成',this.$date)
        },
        beforeMount(){
            //即将挂载:组件标签还没有渲染
            console.log(document.getElementById('app'))
        },
        mounted(){
            //挂载完成,组件标签被渲染
            console.log(document.getElementById('app'))
        },
        beforeUpdate(){
            //获取更新之前的DOM
            console.log('更新之前的DOM',document.getElementById('app').innerHTML)
        },
        updated(){
            //获取最新的DOM
            console.log('更新完成的DOM',document.getElementById('app').innerHTML)

        },
        beforeDestroy(){
            console.log('销毁之前')
        },
        destroyed(){
            console.log('销毁完成')
        },
        activated(){
            console.log('组件被激活了')
        },
        deactivated(){
            console.log('组件被停用了')

        }
    })

    const App = {
        data(){
            return {
                isShow:true
            }
        },
        methods: {
            clickHandler(){
                this.isShow = !this.isShow
            }
        },
        template: `
            <div>
<!--                //v-if 指令将根据表达式的值的真假来插入/移除-->
                <keep-alive>
                    <test v-if="isShow"></test>
                </keep-alive>
                <button @click="clickHandler">改变生死</button>
            </div>>`,

    }

    new Vue({
        el:'#app',
        data:{

        },
        components:{
            //2.挂载子组件
            App
        }
    })

</script>
</body>
</html>
原文地址:https://www.cnblogs.com/wuhui1222/p/14202606.html