• Vue生命期钩子


    一:生命周期图

    1.官网原图

    img

    3.我理解的图

    img

    二:生命周期

    钩子函数描述
    beforeCreate 创建Vue实例之前调用
    created 创建Vue实例成功后调用(可以在此处发送异步请求后端数据)
    beforeMount 渲染DOM之前调用
    mounted 渲染DOM之后调用
    beforeUpdate 重新渲染之前调用(数据更新等操作时,控制DOM重新渲染)
    updated 重新渲染完成之后调用
    beforeDestroy 销毁之前调用
    destroyed 销毁之后调用

    create

    1
    let vm = new Vue()

    mount

    挂载,把div挂载到组件中

    img

    update

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let vm = new Vue({
    el: '#box',
    data: {
    isShow: true // 修改这个内容
    },
    methods: {
    handleClick() {
    console.log('我是根组件')
    }
    }
    })

    1.bedoreCreate

    2.created

    3.beforeMount

    4.mounted(用得最多)

    这时候可以向后端发送数据了

    5.beforeUpdate

    6.updated

    7.beforeDestroy

    8.destroyed

    组件销毁 - 给组件写一个定时器

    1
    2
    setTimeout()    // 延迟3s干什么事
    setInterval() // 延迟3s干什么事

    测试代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>生命周期</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
    </head>
    <body>
    <div id="box">
    <child v-if="isShow"></child>
    <br>
    <button @click="terminate">删除子组件</button>
    <button @click="reborn">显示子组件</button>
    </div>
    </body>
    <script>
    Vue.component('child', {
    template: `
    <div>
    {{name}}
    <button @click="name='Darker1'">更新数据1</button>
    <button @click="name='Darker2'">更新数据2</button>
    </div>`,
    data() {
    return {
    name: 'Darker1',
    }
    },
    beforeCreate() {
    console.group('当前状态:beforeCreate')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    },
    created() {
    console.group('当前状态:created')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    },
    beforeMount() {
    console.group('当前状态:beforeMount')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    },
    mounted() {
    console.group('当前状态:mounted')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    //用的最多,向后端加载数据,创建定时器等
    console.log("页面已被vue实例渲染, data, methods已更新");
    console.log('mounted')
    this.t = setInterval(function(){
    console.log('daada')
    }, 3000)

    },
    beforeUpdate() {
    console.group('当前状态:beforeUpdate')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    },
    updated() {
    console.group('当前状态:updated')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    },
    beforeDestroy() {
    console.group('当前状态:beforeDestroy')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    },
    destroyed() {
    console.group('当前状态:destroyed')
    console.log('当前el状态:', this.$el)
    console.log('当前data状态:', this.$data)
    console.log('当前name状态:', this.name)
    //组件销毁,清理定时器
    clearInterval(this.t)
    this.t = null
    console.log('destoryed')
    },


    })
    let vm = new Vue({
    el: '#box',
    data: {
    isShow: true
    },
    methods: {
    terminate() {
    this.isShow = false
    },
    reborn() {
    this.isShow = true
    }
    }
    })
    </script>
    </html>

    ##############################

    表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数
    钩子函数: 满足特点条件被回调的方法

    8个生命周期函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
    </head>
    <body>
    <div id="box">
    <child v-if="isShow"></child>
    </div>
    </body>
    <script>
    Vue.component('child', {
    template: `<div>
    child-->div
    <button @click="name='egon'">点我变egon</button>
    <button @click="name='lqz'">点我变lqz</button>
    <br>
    {{name}}
    </div>`,
    data() {
    return {
    name: 'lqz',
    t: null,
    }
    },
    beforeCreate() {
    console.log('beforeCreate')
    },
    created() {
    console.log('created')
    },
    beforeMount() {
    console.log('beforeMount')
    },
    mounted() {
    //用的最多,向后端加载数据,创建定时器等
    console.log("页面已被vue实例渲染, data, methods已更新");
    console.log('mounted')
    this.t = setInterval(function () {
    console.log('daada')
    }, 3000)
    },
    beforeUpdate() {
    console.log('beforeUpdate')
    },
    updated() {
    console.log('updated')
    },
    beforeDestroy() {
    console.log('created')
    },
    destroyed() {
    //组件销毁,清理定时器
    clearInterval(this.t)
    this.t = null
    console.log('destoryed')
    },


    })
    var vm = new Vue({
    el: '#box',
    data: {
    isShow: true
    }

    })
    </script>
    </html>
  • 相关阅读:
    yum -y install python-devel
    安装xampp之后报错XAMPP: Starting Apache...fail.
    mysql 监控及优化——转载自http://www.cnblogs.com/suansuan/
    jmeter做http请求时报错
    soapui打开即报错------连接不上Internet
    jmeter遇到的问题:java.net.ConnectException: Connection refused: connect
    idea常用设置汇总
    intellij idea参数提示param hints
    intellij高亮字体背景颜色
    idea去除mybatis的xml那个恶心的绿色背景
  • 原文地址:https://www.cnblogs.com/bubu99/p/14742433.html
Copyright © 2020-2023  润新知