← 返回首页
Vue基础教程(十一)
发表时间:2020-04-13 12:27:11
讲解Vue的生命周期

1.组件生命周期

下图展示了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。

Vue的组件都是独立存在的,每个组件都要经历他自己的生命周期。Vue的生命周期是指组件: 创建—>数据初始化—>挂载—>更新—>销毁 通过下面的这张图,简单的来说就是组件从创建到销毁之间的过程。

生命周期实例:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document Title</title>
</head>

<body>
<div id="app">
    <button @click="update">更新</button>
    <h3 id="h3">{{ message }}</h3>
</div>

<!-- 引入开发环境的vue.js版本,包含了有帮助的命令行警告 ,这样使用的也是最新版本-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            message: 'Java大法好!'
        },

        //===创建时的四个事件
        beforeCreate() { // 第一个被执行的钩子方法:实例被创建出来之前执行
            console.log(this.message) //undefined
            this.show() //TypeError: this.show is not a function
            // beforeCreate执行时,data 和 methods 中的 数据都还没有没初始化
        },
        created() { // 第二个被执行的钩子方法
            console.log(this.message) //Java大法好!
            this.show() //执行show方法
            // created执行时,data 和 methods 都已经被初始化好了!
            // 如果要调用 methods 中的方法,或者操作 data 中的数据,最早,只能在 created 中操作
        },
        beforeMount() { // 第三个被执行的钩子方法
            console.log(document.getElementById('h3').innerText) //{{ message }}
            // beforeMount执行时,模板已经在内存中编辑完成了,尚未被渲染到页面中
        },
        mounted() { // 第四个被执行的钩子方法
            console.log(document.getElementById('h3').innerText) //Java大法好!
            // 内存中的模板已经渲染到页面,用户已经可以看见内容
        },


        //===运行中的两个事件
        beforeUpdate() { // 数据更新的前一刻
            console.log('界面显示的内容:' + document.getElementById('h3').innerText)
            console.log('data 中的 message 数据是:' + this.message)
            // beforeUpdate执行时,内存中的数据已更新,但是页面尚未被渲染
        },
        updated() {
            console.log('界面显示的内容:' + document.getElementById('h3').innerText)
            console.log('data 中的 message 数据是:' + this.message)
            // updated执行时,内存中的数据已更新,并且页面已经被渲染
        },
        methods: {
            show() {
                console.log('执行show方法')
            },
            update() {
                this.message = '人生苦短,我学python!'
            }
        }
    })
</script>
</body>
</html>

运行结果:

点击更新后:

2.包含子组件的生命周期

父子组件第一次加载时触发的生命周期函数以及执行顺序如下:

父beforeCreate --> 父caeated --> 父beforeMount --> 子beforeCreate --> 子created --> 子beforeMount --> 子mounted -->父mounted

父子组件更新时触发的声明周期函数以及执行顺序如下:

父beforeUpdate --> 子beforeUpdate --> 子updated --> 父updated

父子组件销毁时触发的生命周期函数执行顺序如下:

父beforeDestroy --> 子beforeDestroy --> 子destroyed --> 父destroyed