生命周期(vue)

  代码和人一样都是有自己的周期的,只有好好的了解代码的周期才可以更好的完成项目开发,今天我们来讲讲vue中提到的"生命周期"和"生命周期钩子".

第一步我们来了解一下她俩的含义

  a.生命周期:vue实例从创建到销毁过程中发生的一系列的状态

  b.生命周期钩子:钩子的作用是提供给用户在不同阶段添加自己的代码的机会

第二步我们来看看vue官网中关于"生命周期钩子"的选项有哪些?如下图(官网:https://cn.vuejs.org/v2/api/#beforeCreate)

第三步我们来了解并解释一下官网的生命周期流程图.如图(https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA)

  a.初始化vue实例

  b.初始化事件和读取生命周期函数

  c.beforeCreate()....这个时候你什么都获取不了,数据和dom也操作不了

  d.读取data,computed,watch,methods....以及属性的监听,数据观测(data observer),属性和方法的运算等

  e.created().....这个时候就可以操作属性和方法了

  f.判断是否有el配置项,如果没有就判断是否执行了$mont()(注释:$mount("#app")叫动态挂载,等价于配置项中的el:#app),若两者都没有的话就不再往下执行了

  g.判断是否有template,如果有,就将template渲染到el上,没有就执行render

 

  h.beforeMount()...这个时候还没有获取到dom,不可以操作dom

  i.mounted()...这个时候你就可以操作dom了(操作dom结构的方式不建议使用document,采用ref)

  数据发生变化后

   dom更新的流程

  j.beforeUpdate()....数据以经更新但是dom没有重新渲染,如果获取页面中的数据还是原来的值

  k.updated()....数据和dom以及更新,打补丁完成(这个时候就可以重新计算滚动条的长度,轮播图中的页面数量等)

  销毁

  l.beforeDestroy()

  m.Vue 实例指示的所有东西都会解绑,所有的事件监听会被移出,所有的子实例也会被销毁.

  n.destroyed()

  附录,vue.js需要自己去官网下载

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>


    <div id="app">


        <!--  在vue的作用范围内的标签的唯一标识符  -->
        <p ref="p1">{{message}}</p>
        <p ref="p2">{{message}}</p>
        <p ref="p3">{{message}}</p>
        <p ref="p4">{{message}}</p>
        <p ref="p5">{{title}}</p>

        <p><input type="text" v-model="message"></p>
        <button @click="print()">按钮</button>

        <div class="box" v-if="isShow"></div>

    </div>


    <div id="app2">

        <p>{{message}}</p>
        <p><input type="text" v-model="message"></p>
        <button @click="print()">按钮</button>

    </div>

    <script src="vue.js"></script>

    <script>
    // 生命周期:vue实例从创建到销毁发生的一系列的状态
    // 生命周期钩子:钩子的作用给用户在不同阶段添加自己的代码的机会。
    // 创建
    var vm = new Vue({
        // el: '#app',
        data: {
            message: 'hello vue',
            title: '',
            isShow: true
        },
        methods: {
            print(){
                console.log(this.message);
            }
        },

        // 生命周期钩子/生命周期函数/钩子函数
        beforeCreate(){
            console.log('beforeCreate--------------------------------');
            //无效:
            // console.log(this.message);
            // this.print();
        },
        created(){
            console.log('created--------------------------------');
            //可以使用属性和方法等了
            // console.log(this.message);
            // this.print();

        },
        beforeMount(){
            console.log('beforeMount--------------------------------');
            console.log(document.querySelector('p').innerText);

            console.log(this.$refs);

        },
        mounted(){
            console.log('mounted--------------------------------');
            console.log(document.querySelector('p').innerText);

            console.log(this.$refs);
            console.log(this.$refs.p1.innerText);

        },
        beforeUpdate(){
            console.log('beforeUpdate--------------------------------');
            console.log(this.message);
            console.log(this.$refs.p1.innerText);
        },
        updated(){
            console.log('updated--------------------------------');
            console.log(this.message);
            console.log(this.$refs.p1.innerText);
        },
        beforeDestroy(){
            console.log('beforeDestroy--------------------------------');
        },
        destroyed(){
            console.log('destroyed');
        },
        //捕获子组件的异常
        // errorCaptured(){
        //     console.log('errorCaptured');
        // }
    })

猜你喜欢

转载自www.cnblogs.com/tc-jieke/p/9265110.html