Vue 的计算属性(computed)

举报
可期 发表于 2021/12/06 10:51:58 2021/12/06
【摘要】 今天有事努力的一天!!!如果事与愿违,那一定另有安排。积极生活,让我们的每一天都充满热情。 上知识!在Vue中我们可以通过计算将已知的属性通过computed计算得到不存在是属性比如说我们在下面举一个例子<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compa...

今天有事努力的一天!!!
如果事与愿违,那一定另有安排。积极生活,让我们的每一天都充满热情。

上知识!

在Vue中我们可以通过计算将已知的属性通过computed计算得到不存在是属性

比如说我们在下面举一个例子

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>methods实现</title>
    <script src="../vue.js/vue.js"></script>
</head>

<body>
    <h1>购物车</h1>
    <div id="root">
        商品单价:<input type="text" v-model="oneprice">
        <br /><br />
        商品数量:<input type="text" v-model="quantity">
        <button @click="add">+</button> <button @click="sub">-</button>
        <br /><br />
        商品总价:<span>{{totalprice}}</span>
    </div>
    <script>
        const vm = new Vue({
            el: '#root',
            //属性
            data: {
                oneprice: 29,
                quantity: 1
            },
            methods:{
                add:function(){
                    this.quantity++
                },
                sub:function(){
                    this.quantity--
                }
            },
            // 计算属性
            computed: {
                totalprice: {
                    get() {
                        return this.oneprice * this.quantity
                    },
                    set(value){
                        console.log('set',value)
                        const arr = value.split('-')
                        this.oneprice = arr[0]
                        this.quantity = arr[1]
                    }
                }
            }
        })
    </script>
</body>

</html>

由以上代码我们可知oneprice和quantity属性是已知的,但是totalprice属性是不存在的。但是我们可以通过computed 计算属性计算得到totalprice属性。即通过已有的属性计算得到不存在的属性。
以下代码:通过oneprice * quantity 得到 totalprice

data: {
                oneprice: 29,
                quantity: 1
            }

此处我们在data中定义了oneprice和quantity的初始值,那么他们就充当的已存在的属性,然后我们绑定点击事件就可以实现用户控制商品数量的加减。

methods:{
                add:function(){
                    this.quantity++
                },
                sub:function(){
                    this.quantity--
                }
            }

这里我们使用add()函数和sub()函数,可以简单的计算控制quantity的自增自减

computed: {
                totalprice: {
                    get() {
                        return this.oneprice * this.quantity
                    },
                    set(value){
                        console.log('set',value)
                        const arr = value.split('-')
                        this.oneprice = arr[0]
                        this.quantity = arr[1]
                    }
                }
            }

商品总价就等于商品单价*商品数量。我们还需要使用到get函数
这里我们使用get原理是:当有人读取totalprice时,get就会被调用。且返回值就作为totalprice的值
那我们什么时候使用get:1.初次读取totalprice时。 2.所依赖的数据发生变化时

set(value){
                        console.log('set',value)
                        const arr = value.split('-')
                        this.oneprice = arr[0]
                        this.quantity = arr[1]
                    }

这里的set函数是当计算属性被修改时需要调用set函数,且需要依赖数据的变化

那么今天就讲到这里,让我们来做个总结

计算属性:
1.定义:要用的属性不存在,要通过已有属性计算得到
2.原理:底层借助了object.defineproperty()方法提供getter和setter
3.get函数什么时候被执行?
(1)初次被读取时
(2)当依赖的数据发生变化时会被再次强调
4.优势:与methods实现相比,内部有缓存机制,效率更高,测试方便
5.备注:
(1) 计算属性最终会出现在vm上,直接读取即可
(2) 如果计算属性要被修改,那必须写set函数去相应修改,且set中要引起计算时依赖数据发生变化

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。