vue组件实例的生命周期

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

<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>
</head>

<body>
    <div id="demo"></div>
    <script src='https://cdn.bootcss.com/vue/2.3.2/vue.js'></script>
    <script>
        var vm = new Vue({
            el: '#demo',
            beforeCreate: function () {
                console.log("开始初始化时同步调用,此时数据观察,事件都没有初始化");
            },
            created: function () {
                console.log('已经完成实例的创建');
            },
            beforeMount: function () {
                console.log("在模版编译之前执行");
            },
            mounted: function () {
                console.log("模版编译完成");
            },
            beforeUpdate: function () {
                console.log("更新数据前");
            },
            updated: function () {
                console.log('如果你要更新数据,那么每次更新数据之后就会调用');
            },
            beforeDestroy: function () {
                console.log("开始销毁实例时调用,此用的实例依然有用");
            },
            destroyed: function () {
                console.log("实例已销毁");
            },
            activated: function () {
                console.log("动态组件初始化渲染过程中调用,需要keep-live配合使用");
            },
            deactivated: function () {
                console.log("动态组件移出过程中调用,需要keep-live配合使用");
            }
        });
    </script>
</body>

</html>

 

对钩子函数一个比较通俗易懂的解释:

Vue在实例化一个组件时会在特定的阶段调用特定的方法,调用的这个方法就叫钩子方法,比如Vue在实例化组件之初按顺序调用beforeCreated,created,beforeMounted,mounted,每个阶段组件内部的属性都是不一样的,比如created钩子时视图还没有渲染,就不能做一些dom操作。所以一般特定的钩子做特定的事,比如ajax获取数据就可以在mounted阶段,当然放在created,beforeMounted也是可以的,因为ajax是异步的嘛,ajax之后的回调会放在事件队列的尾部,此时实例化组件整个过程会在ajax回调之前执行完毕。所以ajax操作放在created,mounted里面都是可以的。

参考文章:https://segmentfault.com/a/1190000008010666

 

posted @ 2018-05-08 14:19  最好的年纪  阅读(244)  评论(0编辑  收藏  举报