date1215生命周期的钩子函数

60 阅读1分钟

创建阶段和挂载阶段

第一篇:解释篇

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../../js/vue.global.js"></script>
</head>

<body>
    <div id="box">
        {{a}}
        <input type="text" id="ipt" ref="txt">
        <child ref="child"></child>
    </div>
    <script>
        // 定义一个子组件
        let child = {
            template: `
                <div>
                    <input type="text">
                </div>
            `,
            data(){
                return{
                    str:"ninhao "
                }
            },
            methods:{
                fun(){
                    console.log(1235);
                }
            },
        }
        Vue.createApp({
            components:{
                child
            },
            data() {
                return {
                    a:123
                }
            },
            // 创建阶段常用的两个钩子函数
            beforeCreate(){     //这个钩子函数是最早的生命周期的钩子函数 使用频率不高 拿不到任何数据
                console.log("app beforeCreate",this.a);
            },
            created(){          //可以拿到数据 常用
                console.log("app create",this.a);
            },

            // 挂载阶段
            beforeMounted(){
                console.log("app beforeMounted",this.a , this);
            },
            mounted(){  
                console.log("app mounted",this.a,this);
                let res = this.$refs.txt    // 可以用ref去标识节点   可以用ref去表示组件
                res.focus();
                console.log(this.$refs.child.str.focus);    // 父组件通过ref标识访问子组件的数值
                console.log(this.$refs.child.fun);    //父组件通过ref标识访问子组件的方法

            }
        }).mount("#box")
    </script>





    <!-- 
        生命周期的钩子函数
            在组建的生命周期的过程中自动调用的函数 

            四个阶段
                创建阶段
                    beforeCreate组件实例初始化之后 自动调用
                    created 组件实例完成所有状态相关的处理之后会自动调用
                    
                挂载阶段
                    beforeMount 组件挂载前自动调用   无真实的Dom节点
                    mounted 组件挂载之后      可以拿到真实的Dom节点
                
                更新阶段
                销毁阶段

     -->
</body>

</html>

第二篇:简洁版

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../../js/vue.global.js"></script>
</head>

<body>
    <div id="box">
        <input type="text" ref="txt">
        <!-- 定义一个方法ref标识组件 -->
        <child ref="child"></child>
    </div>
    <script>
        // 子组件  第一步:用来父组件获取子组件的方法
        let child = {
            template: `<div>hello child</div>`,
            data(){
                return {
                    k:12345
                }
            },
            methods:{
                fn(){
                    console.log("我是一个函数");
                }
            }
        }
        Vue.createApp({
            components:{
                child
            },
            // 生命周期创建阶段
            beforeCreate(){    // 拿不到数据 打印的a是undefined  在组件createApp创建之前调用
                console.log("app beforeCreate",this.a);
            },
            created(){         // 能拿到数据 打印的是111 在组件创建之后才能拿到数据
                console.log("app created",this.a);
            },

            // 生命周期挂载阶段
            beforeMount(){
                console.log("app beforeMount" , this.a);   // 能拿到数据
                console.log(this.$refs.txt);               // 不能拿到节点  是undefined
            },
            mounted(){
                console.log("app mounted" , this.a , this.$refs.txt.focus());   // 能拿到数据和节点
                console.log(this.$refs.child.k);    // 父组件访问子组件里的数据
                console.log(this.$refs.child.fn);   // 父组件访问子组件里的方法
            },


            data() {
                return {
                    a:111
                }
            },
        }).mount("#box")
    </script>
</body>

</html>