vue基础学习笔记 --- 计算属性、计算属性与函数之间的区别、watch监听器

计算属性和函数的区别

函数不会缓存数据,在每次访问都要重新求值(如果数据经常发生变化,推荐使用函数)
计算属性会缓存数据,只要数据没有发生变化,就不会重新求值(如果数据不经常变化,推荐使用计算属性)

计算属性 - computed计算属性

什么是计算属性?
computed定义计算属性,计算属性类似于methods里面定义的函数;
首先computed计算属性是用于在HTML模板中表达式更加简洁,易维护。
computed具有缓存功能,当与computed变量相关的变量值不发生改变时,一直用的是缓存中的值,只有当依赖变量值发生改变时,computed计算属性值才会发生更改
computed变量不在data中定义,而是在computed对象中定义

格式: 在和data、methods同级的地方写 computed:{
处理完的数据变量(){
return 你的操纵数据的逻辑
}
}

watch监听器

  • watch监听属性监听的是data中已经存在的变量,只有当变量值当属性数据发生变化的时候,对应属性的回调函数会自动调用,在函数内部进行计算
  • 通过watch选项或者vm实例的$watch()来监听指定的属性
    当需要在数据变化时执行异步或开销较大的操作时,这时watch是非常有用的
  • watch只能监听简单数据类型,当监听对象、数组等复杂数据类型时,其中的元素值改变也不会触发watch中监听对象的方法。
    但是可以采用深度监听来监听对象的变化,设置deep: true,就可以解决特点3的问题来监听某个对象的属性,但是当对象嵌套的属性太深时开销太大。

示例:已知一位同学的数学成绩和英语成绩,求总成绩,

    <div id="app">
   	   
        数学:<input type="text" v-model="mathScore">    
        英语:<input type="text" v-model="englishScore">
        <br>
        总得分(函数):<input type="text" v-model="sumScore()">
        <br>
        总得分(计算属性 单向):<input type="text" v-model="sumScore1">
        <br>
        总得分(计算属性 双向):<input type="text" v-model="sumScore2">
        <br>
        总得分(侦听器):<input type="text" v-model="sumScore3">

    </div>
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script>
		 let vm = new Vue({
            el: "#app",
            data: {
                mathScore: 80,
                englishScore: 90,
                sumScore3: 0
            },
            //方法
            methods: {
                sumScore() {
                    return (this.mathScore - 0) + (this.englishScore - 0)
                }
            },
            //计算属性:
            computed: {
           		 //单项绑定
                sumScore1() {
                    return (this.mathScore - 0) + (this.englishScore - 0)
                },
                //双向绑定
                sumScore2: {
                    get() {
                        return (this.mathScore - 0) + (this.englishScore - 0)
                    },
              		//,当检测到总成绩发生改变时,把数学成绩和英语成绩更新为平均分
                    set(newValue) {
                        let avgValue = newValue / 2;
                        this.mathScore = avgValue;
                        this.englishScore = avgValue
                    }
                }
            },
            //用watch监听器监听数学分数,定义一个新的数学成绩的值,
            //总成绩为新的数学成绩的值和原来英语成绩的值的总和
            //当改变数学成绩的时候,总成绩发生改变,
            //当改变英语成绩的时候,总成绩不变
            watch: {
                mathScore(newValue) {
                    this.sumScore3 = (newValue - 0) + (this.englishScore - 0)
                }
            }
        })
        //通过vm的方式调用
        //第一个参数就是被监听的属性名,第二个参数是回调函数
        vm.$watch("englishScore", function (newValue) {
        //newValue是新的英语成绩
            this.sumScore3 = (newValue - 0) + (this.mathScore - 0)
        })
    </script>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值