vue 计算属性

计算属性:

        1、定义:要用的属性不存在,要通过已有属性计算得来。

        2、原理:底层借助了object.defineproperty方法提供的getter和setter。

        3、get函数什么时候执行?

                (1)初次读取时会执行一次。

                (2)当依赖的数据发生改变时会被再次调用。

        4、优势:与methods实现相比,内部存在缓存机制(复用),效率更高,调试方便。

        5、备注:

                (1):计算属性最终会出现在vm上,直接读取使用。

                (2):如果计算属性要被修改,那必须写set函数去响应修改。 

<body>
    <div class="a" id="a">
        省:<input type="text" v-model="province"> <br><br>
        市:<input type="text" v-model="city"> <br><br>
        位置:<span>{{ area }}</span> <br><br>
        修改位置:<input type="text" v-model="area">
    </div>
    <script>
        var vm = new Vue({
            el: '#a',
            data: {
                province : '云南',
                city : '昆明',
            },
            computed:{
                area:{
                    get(){
                    console.log('get方法被调用')
                    return this.province + '-' + this.city
                    },
                    set(area){
                        console.log('set方法被调用')
                        const arr = area.split('-')
                        this.province = arr[0]
                        this.city = arr[1]
                        
                    }
                }
            }
        }
        )
    </script>
</body>

 省和市通过绑定v-model事件实现数据的双向绑定,而所在位置的信息并不在data数据中,这就是所需的数据不存在,所以用到了计算属性来计算得到,当然也可以通过将数据通过插值法直接在{{ }}中写表达式实现例如{{province + '-' + city}},但是在vue中希望模板视图中尽量的简单,所以不推荐,但是这样的写法并不会报错。其次通过methods下写方法页可以实现,定义好方法后直接在视图中{{方法名()}}也可以。但是由于计算属性的缓存机制,所以优先使用计算属性方法。

如下图修改省和市可以通过计算属性得到位置。修改省和市的时候同时位置信息也发生改变 

 

由于计算属性有缓存机制,所以在已有属性不发生改变的情况下,同时使用多次计算属性也只会调用一次get方法。

除非我们通过input框去修改了省和市的数据,使数据发生改变时才会再次调用get方法去更新计算属性。

通常计算属性并不会去修改,我们只是为了展示一些计算后的属性去供人查看。所以计算属性有一个简洁的写法,只具备get方法,具体代码如下:

 

计算属性与监视属性的区别:

  • computed: 是vue的计算属性, 是通过data中已有的属性计算得来的, 理解为是对data数据的加工处理, 计算属性最终会出现在VM上可以直接读取
  • watch: 是vue的监听属性, 和computed一样都是一个对象, 当被监视的属性变化时, 回调函数自动调用, 进行相关操作(监视的属性必须存在,才能进行监视), 监听复杂类型数据(对象,数组)变化时需要加上deep属性开启深度监听
  • 两者区别:
    • computed能完成的功能,watch都可以完成
    • watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作, computed不支持异步,有异步操作时无法监听数据变化
    • computed支持缓存,当其依赖的属性的值发生变化时,计算属性会重新计算,反之,则使用缓存中的属性值;watch不支持缓存,当对应属性发生变化的时候,响应执行。
    • computed第一次加载时就监听;watch默认第一次加载时不监听(可以通过设置immediate参数为true实现第一次加载时监听)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想搞技术

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

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

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

打赏作者

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

抵扣说明:

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

余额充值