11、Vue计算属性computed


1、什么是计算属性

在模板中可以直接通过插值语法显示一些data中的数据。但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示。
比如我们有num和price两个变量,我们需要得到numprice总价格,那么可以写成{{numprice}},但是如果多个地方都需要显示完整的名称,我们就需要写多个{{num*price}}。
这个时候,我们可能会想到使用方法来定义函数,如下例所示:

 <div id="app">
        <div class="eg1" style="border: 1px solid blue;">
            <h3>商品数量:{{num}}</h3>
            <h3>商品单价:{{price}}</h3>
            <h4>商品总价:{{num*price}}</h4>
        </div>
        <div class="eg2" style="border: 1px solid red;">
            <h4>商品总价:{{getPrice()}}</h4>
            <h4>商品总价:{{getPrice()}}</h4>
            <h4>商品总价:{{getPrice()}}</h4>
            <h4>商品总价:{{getPrice()}}</h4>
        </div>
        
    </div>
    <script src="./Vuejs/vue2-6-12.js"></script>
    <script>
        var vm = new Vue({
            el:"#app",
            data:{
                num:10,  //数量
                price:12 //单价
            },
            methods:{
                getPrice(){
                    console.log(1)
                    return this.num * this.price
                }
            }

        })
    </script>

在这里插入图片描述
从上面的例子中,我们可以看到使用methods创建方法能够简化代码,但是这里还是有一个问题,那就是使用getPrice自定义函数时,每当使用{{getPrice()}}的时候,我们的getPrice()函数都会运行一次,可看到最后输出了4个1。这样存在一个问题,即当我们想要得到的num*price的值没发生任何变化的时候,每次调用getPrice()函数的时候都会运行一次函数,这样就显得比较多余,而且会消耗我们的性能,因此引进了计算属性。

2、计算属性

①:如何使用?
computed 和 data同级,计算属性写在computed中;写起来像方法;用起来像属 性。
②:特点(注意点):
1)一定要有返回值。
2)可以使用data中的已知值。
3)只要跟计算属性相关的数据发生了变化,计算属性就会重新计算,不相关的属 性无论如何变化,都不会导致计算属性变化。
4)计算属性名不能和data中的数据重名(因为要使用data中的数据)
③:什么时候使用?
想要根据data中的已知值,得到一个新值,并且这个新值会随着相关数据的变化 而变化。

<div id="app">
            <h4>商品总价:{{getPrice}}</h4>
            <h4>商品总价:{{getPrice}}</h4>
            <h4>商品总价:{{getPrice}}</h4>
            <h4>商品总价:{{getPrice}}</h4>
        
    </div>
    <script src="./Vuejs/vue2-6-12.js"></script>
    <script>
        var vm = new Vue({
            el:"#app",
            data:{
                num:10,  //数量
                price:12 //单价
            },
            computed:{
                getPrice(){
                    console.log(1)
                    return this.num*this.price
                }
            }
        })
    </script>

在这里插入图片描述
我们可以看到此时调用getPrice的时候它只运行了一次,在它的值未发生任何变化的时候,调用函数getPrice来自它的缓存,因此不会再运行该函数,这样能达到节省消耗性能的效果。还要注意一点,使用getPrice的时候,和方法不同的是,它在调用的时候直接写即可,不需要和方法methods一样使用getPrice()。

3、计算属性的set和get

computed计算属性中包含了set和get两个方法(回调函数)。
get回调函数: 当需要读取当前属性值时调用,根据相关的数据计算并返回当前属性的值。
set回调函数:监视当前属性值发生改变时调用,更新相关的属性值。
在这里插入图片描述
在这里插入图片描述
每个计算属性都包含一个getter和setter,在上个例子中,我们只是用getter来读取。在某些情况下我们也可以提供一个setter方法(不常用)。
在这里插入图片描述
计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算,否则就是多次调用,但只会计算第一次,其他次调用的计算结果采用缓存的结果。注意,如果某个依赖 (比如非响应式属性) 在该实例范畴之外,则计算属性是不会被更新的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值