vue 生命周期(详情版 面试题+代码)

1.什么是生命周期?
        生命周期: 是指一个事物从产生,到最后消亡的整个过程;

        vue:vue 实例 组件的生命周期: 实例,从创建到消毁的整个过程;

        在不同的生命周期,可以执行不同的操作;

2.beforeupdate 和 updated 的区别是什么?
        beforeupdate  数据在内存中更新完成,但是在页面节点中还没有更新的;

        updated data中的数据更新后才触发;在内存与页面中都更新了

3,发送ajax 最早在哪个生命周期里?
        发送ajax请求最早在created;

4.页面加载的时候,vue生命周期的触发顺序是怎样的呢?
         beforecreate created beforemount  mounted

5每个生命周期函数的特点是什么?
        beforeCreate
        创建之前,在beforeCreate生命周期执行的时候,data和methods中的数据都还没有初始化,不能访问data数据

beforeCreate(){
    console.log('beforeCreate',this.msg);
},


created
        创建之后,data和methods中的数据已经初始化,此时可以访问data数据
一般在这个函数中发起ajax请求

created(){
    console.log('created',this.msg);
},


beforeMount
挂载之前,表示模板已经在内存中编译完成,但尚未把模板渲染到页面中。
此时还没有渲染用数据生成的新dom

beforeMount(){
    console.log('beforeMount',this.$el);
},


mounted
表示内存中的模板,已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了
此时可以访问dom

mounted(){
    console.log('mounted',this.$el);
},


beforeUpdate
当且仅当data被修改时才触发这个生命周期函数,但此时仅仅是数据被修改,页面

beforeUpdate(){
    console.log('beforeUpdate',this.msg);
    console.log('beforeUpdate',this.$el.innerHTML);
},

还未更新。


updated
会根据新数据生成最新的内存DOM树,重新渲染到真实的页面中去,
此时的data数据和页面已完成同步

updated(){
    console.log('updated',this.$el.innerHTML);
},


beforeDestroy
当执行beforeDestory钩子函数的时候,Vue实例就已经从运行阶段,进入到了销毁阶段。
当执行beforeDestory的时候,实例身上所有的data和所有的methods,以及过滤器、指令...都处于可用状态,此时还没有真正执行销毁过程。

beforeDestroy(){
    console.log('beforeDestroy');
},

destroyed
当执行到destoryed函数的时候,组件已经被全部销毁了,data与methods均不可用。
更改data数据,页面不会更新

destroyed(){
    console.log('destroyed');
}


代码:

<!DOCTYPE html>
<html>
<head>
    <title></title>
<script type="text/javascript" src="lib/vue.js"></script>
<style type="text/css">
 * {
            padding: 0;
            margin: 0;
        }
        .box {
            width: 500px;
            height: 200px;
            border: 1px solid #ccc;
            margin: 50px auto;
            overflow: hidden;
        }
        ul {
            width: 600px;
            height: 40px;
            margin-left: -1px;
            list-style: none;
        }
        li {
            float: left;
            width: 101px;
            height: 40px;
            text-align: center;
            font: 600 18px/40px "simsun";
            background-color: pink;
            cursor: pointer;
        }
        span {
            display: none;
            width: 500px;
            height: 160px;
            background-color: yellow;
            text-align: center;
            font: 700 100px/160px "simsun";
        }
        .show {
            display: block;
        }
        .current {
            background-color: yellow;
        }
</style>
</head>
<body>
<div id="app">
    <div id="box" ref="box" style="border:1px red solid;width:100px;height: 100px;">
        aaa{{n}}
    </div>
    <button @click="updaten">更新n</button>
 
 
    <div class="box">
    <ul>
        <li class="current">鞋子</li>
        <li>袜子</li>
        <li>帽子</li>
        <li>裤子</li>
        <li>裙子</li>
    </ul>
    <span class="show">鞋子</span>
    <span>袜子</span>
    <span>帽子</span>
    <span>裤子</span>
    <span>裙子</span>
</div>
</div>
<script type="text/javascript">
//生命周期: 是指一个事物从产生,到最后消亡的整个过程;
//树:种子发芽,小苗, 大苗 ,小树,大树, 枯萎; 
//人: 出生,婴儿,小儿童,大儿,少年,青年,壮年,老年,去世
//vue:vue 实例 组件的生命周期: 实例,从创建到消毁的整个过程; 
//在不同的生命周期,可以执行不同的操作;
 
//生命周期函数,生命周期钩子
//新打开组件,页面,执行哪些函数:be 
let app = new Vue({
    el:"#app",
    data:{
        n:1,
        k:2
    },
    methods:{
        updaten(){
            this.n = "2"
        }
    },
 
    beforeCreate(){
        //实例产生之前调用这个方法; 此时这个实例在内存中还没有产生
        //此时,data,el,methods方法都无效; 
 
        console.log("A实例产生之前调用");
        // console.log(this.n);
        // this.updaten();
        //获取节点在MOUNTED中获取不能beforecatea;
        // let box = this.$refs.box;
        // console.log(box);
        // box.style.backgroundColor="pink";
    },
    created(){
        // 指这个实例已经在内存中产生;但是还没有放到页面中; 
        console.log("B实例已经创建完毕,但是没有挂载到 页面");
        //可以操作DOM nextick();   发送ajax请求;
        //可以拿到数据;拿不到el; 
        console.log(this.$el);
        console.log(this.n);
        // this.updaten();
    },
 
    beforeMount(){
        //即将从内存中挂到页面中
        console.log("C挂载前");
        console.log(this.$el);
    },
 
    mounted(){
        // 内存中的实例已经彻底挂到页面中;
        console.log("D挂载到父节点");
        //可以操作DOM   发送ajax请求;
            var liArr = document.getElementsByTagName("li");
            var spanArr = document.getElementsByTagName("span");
            for(var i=0;i<liArr.length;i++){
                //绑定索引值(新增一个自定义属性:index属性)
                liArr[i].index = i;
                liArr[i].onmouseover = function () {
 
                    //1.点亮上面的盒子。   2.利用索引值显示下面的盒子。(排他思想)
                    for(var j=0;j<liArr.length;j++){
                        liArr[j].className = "";
                        spanArr[j].className = "";
                    }
                    this.className = "current";
                    spanArr[this.index].className = "show"; //【重要代码】
                }
            }
 
    },
    beforeUpdate(){
        //beforeupdate  updated 区别; 
        //数据在内存中更新完成,但是在页面节点中还没有更新的; 
        console.log("data更新前");
        console.log(document.getElementById('box').innerHTML); // 1
    },
    updated(){
        //data中的数据更新后才触发; 
        //在内存与页面中都更新了; 
        console.log("更新后");
        console.log(document.getElementById('box').innerHTML); //2
    }
    //watch
})
</script>
 
<script type="text/javascript">
//什么是生命周期; 
//生命周期有哪些: beforecreate created beforemount  mounted  beforeupadate updated; 
//每个周期的特点:
 
//发送ajax请求最早在created; 
//页面组件,重新加载时会触发哪些生命周期;
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值