zoukankan      html  css  js  c++  java
  • Vue生命周期、计算属性

    一:生命周期

    概述:

    1.生命周期又叫钩子函数,跟el、data、同级的位置,指的是vue实例从开始创建到最后销毁经历的三阶段,这三个阶段分别叫创建阶段、运行阶段的钩子函数、销毁阶段的钩子函数。

    2.其中,三个阶段一共有8个函数

    ①创建阶段有四个函数

    beforeCreate        实例创建之前

    created           实例创建完成

    beforeMount        模板挂载之前

    mounted           模板挂载之后

    ②运行阶段有两个函数

    beforeUpdate         视图更新之前

    updated          视图更新之后

    ③销毁阶段有两个函数

    beforeDestroy           实例销毁之前

    destroyed          实例销毁之后

    3.生命周期例子+说明

    <!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>生命周期举例</title>
    </head>
    <body>
        <div id="app">
            <div id="a">{{msg}}</div>
            <button @click="msg++">加加</button>
        </div>
        <div id="btn">销毁</div>
        <script src="lib/vue-2.4.0.js"></script>
        <script>
            var vm=new Vue({
                el:"#app",
                data:{
                    msg:10
                },
                beforeCreate(){//实例创建之前
                    //实例刚刚创建,new vue上只有生命周期函数
                    console.log(this.msg);//undefined
                },
                created(){//实例创建完成
                    //data和methods里的方法可以使用了
                    console.log(this.msg);//10
                },
                beforeMount(){//模板挂载之前
                    //模板编译成的模板字符串会被放进内存中生成一个虚拟dom节点
                    console.log(a.innerHTML);//{{msg}}
                },
                mounted(){//模板挂载之后
                    console.log(a.innerHTML);//10
                },  
                beforeUpdate(){//视图更新之前
                    //也就是说data里的数据发生改变,但视图里的数据还没有发生改变
                    console.log(this.msg);//11
                    console.log(a.innerHTML);//10
                },
                updated(){//视图更新之后
                    //视图里的数据跟着data里的数据改变之后
                    console.log(this.msg);//11
                    console.log(a.innerHTML);//11
                },
                beforeDestroy(){//实例销毁之前
                    console.log(this.msg);//11
                },
                destroyed(){//实例销毁之后
                    console.log(this.msg);//11
                }
            })
            //vm.$destroy()  让vue实例销毁的方法
            //实例销毁之后再次点击加加按钮会失效
            btn.onclick=()=>{//点击销毁
                vm.$destroy();
            }
           
        </script>
    </body>
    </html>

    二:计算属性(computed)

    概述:

    1.在methods方法里,他没有缓存、只要数据一改变就会重新执行,但是跟他无关的数据也会执行。而计算属性可以解决这个问题

    2.计算属性是一个属性,用法跟data里定义的数据用法一样。它需要一个return值 ,并且他有缓存。只有跟他有关的data发生变化的时候才会重新计算,跟他无关的数据发生变化不会触发。

    <!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>计算属性例子</title>
    </head>
    <body>
        <div id="app">
            <button @click="a++">a++</button>
            <button @click="str='world'">str变化</button>
            a:{{adda()}}
            <br>
            方法methods里的{{changestr()}} <br>
            计算属性computed里的{{changestr2}}
    
        </div>
        <script src="lib/vue-2.4.0.js"></script>
        <script>
            var vm=new Vue({
                el:"#app",
                data:{
                    a:0,
                    age:10,
                    str:"hello"
                },
                methods:{
                    adda(){
                        console.log("aaa")
                        return this.a+this.age   
                    },
                    changestr(){
                        console.log('我是methods里的changestr')
                        return this.str.repeat(3)//重复三遍
                    }
                },
                // 计算属性
                computed:{
                    changestr2(){
                        console.log('我是methods里的changestr2')
                        return this.str.repeat(3)
                    }
                },
                //点击a++的时候,后台打印结果如下
                    //aaa
                    //我是methods里的changestr
                //每点击a++一次,它就会打印一次
                //而当点击str变化的时候,后台打印结果是
                    //aaa
                    //我是methods里的changestr
                    //我是methods里的changestr2
                //因为点击后str已经等于world了,所以当你再次点击tr变化的时候,他就不会打印了
            })
        </script>
    </body>
    </html>
  • 相关阅读:
    居中
    redis之列表操作及在django中操作等相关内容-124
    模型类序列化器ModelSerializer的使用等相关内容-84
    序列化类Serializer的基础使用等相关内容-83
    redis的基础使用等相关内容-123
    django框架前后端混合项目之子评论、后台管理页面富文本编辑器、修改头像、修改密码等相关内容-81
    vue框架前后端分离项目之短信验证码、登录、注册接口及前端登陆注册功能等相关内容-122
    web开发模式及drf的介绍等相关内容-82
    django框架前后端混合项目之侧边栏及点赞点踩功能等相关内容-80
    django框架前后端混合项目之首页轮播图、主页、后台管理、头像显示等相关内容-79
  • 原文地址:https://www.cnblogs.com/zhd09/p/11707174.html
Copyright © 2011-2022 走看看