第一章 Vue核心 第十七节 Vue的生命周期

17.1  引出生命周期

    生命周期:
        1.又名:生命周期回调函数、生命周期函数、生命周期钩子
        2.是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数
        3.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的
        4.生命周期函数中的this指向是vm 或 组件实例对象

    示例代码:

复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>1.引出生命周期</title>
        <script src="../lib/vue.js"></script>
        <link rel="stylesheet" href="../../鼠标指针样式.css"/>
    </head>
    <body>
        <div id="root">
            <h2 :style="{opacity}">欢迎学习Vue</h2>
        </div>
        <script type="text/javascript">
            Vue.config.productionTip = false;

            const vm = new Vue({
                el:'#root',
                data:{
                    opacity:1
                },
                methods:{

                },
                mounted(){    //Vue完成模板的解析并把初始的真实的DOM元素放入页面后(挂载完毕)调用mounted
                    let temp = -0.01;
                    setInterval(()=>{
                        this.opacity += temp;
                        if(this.opacity <= 0 || this.opacity > 1){
                            temp *= -1;
                        }
                    },16);
                }
            });

            //通过外部的定时器实现(不推荐)
            // let temp = -0.01;
            // setInterval(()=>{
            //     vm.opacity += temp;
            //     if(vm.opacity <= 0 || vm.opacity > 1){
            //         temp *= -1;
            //     }
            // },16);
        </script>
    </body>
    </html>
复制代码

 

17.2  分析生命周期

    生命周期函数(生命周期钩子) 8个 4对
        beforeCreate(){}    此时无法通过vm访问到data中的数据、methods中的方法  数据代理、数据监测创建之前
    
        created(){}         此时可以通过vm访问到data中的数据、methods中的方法
    
        beforeMount(){}     此时:1.页面呈现的是未经Vue编译的DOM结构 2.所有对DOM的操作,最终都不奏效
    
        mounted(){}         此时:1.页面中呈现的是经过Vue编译的DOM 2.对DOM的操作均有效(尽可能避免)。
                            至此初始化过程结束,一般在此进行:开启定时器、发送网络请求、订阅消息、绑定自定义事件等初始化操作     (重要)
    
        beforeUpdate(){}    此时数据是新的,但页面是旧的,即:页面尚未和数据保持同步
    
        updated(){}         数据是新的,页面也是新的,即页面和数据保持同步
    
        beforeDestroy(){}   此时vm中所有的:data、methods、指令等等,都处于可用状态,马上要执行销毁过程,
                            一般在此阶段:关闭定时器、取消订阅消息、解绑自定义事件等首尾操作                               (重要)
    
        destroyed(){}       此时vm(Vue实例)被销毁

    示例代码:

复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>2.分析生命周期</title>
        <script src="../lib/vue.js"></script>
        <link rel="stylesheet" href="../../鼠标指针样式.css"/>
    </head>
    <body>
        <div id="root">
            <h2>当前的n值是:{{ n }}</h2>
            <button @click="add">n+1</button> <br/>
            <button @click="bye">点我销毁vm</button> <br/>
            <img :src="img" alt="" />
        </div>
        <script type="text/javascript">
            Vue.config.productionTip = false;

            const vm = new Vue({
                el:'#root',
                data:{
                    n:1,
                    img:'../生命周期.png'
                },
                methods:{
                    add(){
                        this.n++;
                    },
                    bye(){
                        this.$destroy();
                    }
                },
                //此时无法通过vm访问到data中的数据、methods中的方法
                beforeCreate(){//数据代理、数据监测创建之前
                    console.log('beforeCreate');
                    // console.log(this);
                    // debugger;
                },
                //此时可以通过vm访问到data中的数据、methods中的方法
                created(){
                    console.log('created');
                    // console.log(this);
                    // debugger;
                },
                //此时:1.页面呈现的是未经Vue编译的DOM结构 2.所有对DOM的操作,最终都不奏效
                beforeMount(){
                    console.log('beforeMounted');
                    // debugger;
                },
                //此时:1.页面中呈现的是经过Vue编译的DOM 2.对DOM的操作均有效(尽可能避免)。
                // 至此初始化过程结束,一般在此进行:开启定时器、发送网络请求、订阅消息、绑定自定义事件等初始化操作
                mounted(){
                    console.log('mounted');
                    // debugger;
                },
                //此时数据是新的,但页面是旧的,即:页面尚未和数据保持同步
                beforeUpdate(){
                    console.log('beforeUpdate');
                    // console.log(this.n);
                    // debugger;
                },
                //数据是新的,页面也是新的,即页面和数据保持同步
                updated(){
                    console.log('updated');
                    // console.log(this.n);
                    // debugger;
                },
                //此时vm中所有的:data、methods、指令等等,都处于可用状态,马上要执行销毁过程,一般在此阶段:关闭定时器、取消订阅消息、解绑自定义事件等首尾操作
                beforeDestroy(){
                    console.log('beforeDestroy');
                    // console.log(this.n);
                    // debugger;
                },
                //此时
                destroyed(){
                    console.log('destroyed');
                }
            });
        </script>
    </body>
    </html>
复制代码

 

17.3  总结生命周期

    常用的生命周期钩子:
        1.mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化工作】。
        2.beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

    关于销毁Vue实例
        1.销毁后借助Vue开发者工具看不到任何信息。
        2.销毁后自定义事件会失效,但原生DOM事件依然有效。
        3.一般不会爱beforeDestroy操作数据,因为即便操作,也不会再触发更新流程了。

    示例代码:

复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>总结生命周期</title>
        <script src="../lib/vue.js"></script>
        <link rel="stylesheet" href="../../鼠标指针样式.css"/>
    </head>
    <body>
        <div id="root">
            <h2 :style="{opacity}">欢迎学习Vue</h2>
            <button @click="stop"> 点我停止变化 </button>
            <button @click="opacity = 1">透明的设置为1</button>

        </div>
        <script type="text/javascript">
            Vue.config.productionTip = false;

            const vm = new Vue({
                el:'#root',
                data:{
                    opacity:1
                },
                methods:{
                    stop(){
                        this.$destroy();
                    }
                },
                mounted(){    //Vue完成模板的解析并把初始的真实的DOM元素放入页面后(挂载完毕)调用mounted
                    let temp = -0.01;
                    this.timer = setInterval(()=>{
                        this.opacity += temp;
                        if(this.opacity <= 0 || this.opacity > 1){
                            temp *= -1;
                        }
                    },16);
                },
                beforeDestroy() {
                    console.log('vm即将驾鹤西游了');
                    clearInterval(this.timer);
                }
            });
        </script>
    </body>
    </html>
复制代码

本文作者:何以之

本文链接:https://www.cnblogs.com/serendipity-echo/articles/15408264.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   何以之  阅读(49)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 残酷游戏 卫兰
  2. 2 明知做戏 吴雨霏
  3. 3 你,好不好? 周兴哲
  4. 4 我可以 蔡旻佑
  5. 5 云烟成雨 房东的猫
  6. 6 说散就散 JC 陈咏桐
  7. 7 我配不上你 夏天Alex
  8. 8 不再联系 夏天Alex
  9. 9 等我先说 夏天Alex
  10. 10 我知道他爱你 夏天Alex
  11. 11 多想在平庸的生活拥抱你 隔壁老樊
  12. 12 这一生关于你的风景 隔壁老樊
  13. 13 我曾 隔壁老樊
  14. 14 关于孤独我想说的话 隔壁老樊
  15. 15 过客 周思涵
  16. 16 备爱 周思涵
  17. 17 嚣张 en
  18. 18 海口 后弦
明知做戏 - 吴雨霏
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 夏至(蔡冕丽)

作曲 : 方文良

编曲 : 吴国恩

等你的汽水喝一半给你加片薄冰

等你的桌面满泄我总会打理重整

不想纯情

不够聪明

你未发现我的身影

得我帮你依照编码整理家里电影

只会得我一个帮你选购喜爱铃声

天天如常

估你心情

等一个眼神求证

一闪擦过如流星

怎么我为我做过的感到惊怕

就像爱吗我也不肯定恐怕

我以为存在吗

千变万化

从来不肯开口可相信吗

离谱吗

请你不要阻我喜欢你

明明是爱但你未说话你扮作闪避

这个沉默冷静的你亳无办法处理

其实我亦怕是错摸心理

总有天会等到好天气

游行示爱大叫着你在某大遍草地

等你无用退避不过仍然害羞的你

还是顾忌太不争气

明知做戏

即使你未太在意不感到惊讶

现在要说爱你请准备招架

勇气还存在吗

不要害怕

随时真的胆敢亲手送花

离谱吗

请你不要阻我喜欢你

明明是爱但你未说话你扮作闪避

这个沉默冷静的你亳无办法处理

其实我亦怕是错摸心理

总有天会等到好天气

游行示爱大叫着你在某大遍草地

等你无用退避不过仍然害羞的你

还是顾忌太不争气

明知做戏

不过不要阻我紧张你

如何令你愉快让我办妥为你准备

喜爱沉默冷静的你还是自信的你

仍愿意为你造一些惊喜

总有天会等到好天气

游行示爱大叫着你在某大遍草地

等你无用退避不过途人目光不理

期待贴着你的手臂

无须做戏

等你喜爱等你不爱就凭摘毫验证

想爱不爱偏爱不理亦同样难划清

天天如常

估你心情

不想扑索来求证

争取过趁还年青

终于你下决定来答应

太动听