Vue2的计算属性---computed

格式
  • 简化格式
  • 完整格式
作用
  • 实现对表单等的总值计算
优势
  • 计算结果会缓存,程序重复执行时直接调用结果
  • 大大提高效率

一,简化格式:

computed:{
           函数名 () {
            .....
           }
        }

二,完整格式:

computed:{
    函数名 () {
        get () {
            return XXX
        },
        set (value) {
            this.对象名=value.函数名等
        }
    }
}

二,作用:
计算属性,顾名思义可以自动计算表单或其他的总值,如下以计算表单的总计为例,先看代码块

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>

</head>
<body>
    <div id="app">
        <table border="1px" color="black" width="300px" text-align="center">
            <tr>
                <th>名字</th>
                <th>数量</th>
            </tr>
            <tr v-for="(item,index) in list">
                <th>{{item.name}}</th>
                <th>{{item.num}}</th>
            </tr>
        </table>
        <p>总计:<strong>{{totalNumber}}</strong></p>
    </div>
</body>

<script>
    const add = new Vue({
        el:'#app',
        data:{
            list:[
                {id:1,name:'操作系统',num:5},
                {id:2,name:'组成原理',num:3},
                {id:3,name:'软工导论',num:6}
            ]
        },

        //computed
        computed:{
            totalNumber () {
                
                let sum=this.list.reduce((num,item)=>num+item.num,0);
                return sum;
            }
        },

        
    })
</script>
</html>

在该代码中,可以计算出总数量为14,看看HTML页面的结果
结果
我们改变代码块中的num值时,用户页面的总计值也会改变,当然,在用户页面按F12打开浏览器的开发者工具,在开发者工具中改变num的值,我们可以更直观的看到computed的作用
desc
三,优势:
computed在程序执行完成时会缓存运行结果,当我们在次执行相同的程序,但数据不变时,computed就会直接调用缓存的结果,而不会重复执行,代码快如下

<body>
    <div id="app">
        <table border="1px" color="black" width="300px" text-align="center">
            <tr>
                <th>名字</th>
                <th>数量</th>
            </tr>
            <tr v-for="(item,index) in list">
                <th>{{item.name}}</th>
                <th>{{item.num}}</th>
            </tr>
        </table>
        <p>总计:<strong>{{totalNumber}}</strong></p>

        //用于检测程序是否会多次执行
        <span>总计:{{totalNumber}}</span><br>
        <span>总计:{{totalNumber}}</span><br>
        <span>总计:{{totalNumber}}</span><br>
        <span>总计:{{totalNumber}}</span><br>
        <span>总计:{{totalNumber}}</span><br>
    </div>
</body>

<script>
    const add = new Vue({
        el:'#app',
        data:{
            list:[
                {id:1,name:'操作系统',num:5},
                {id:2,name:'组成原理',num:3},
                {id:3,name:'软工导论',num:6}
            ]
        },

        //computed
        computed:{
            totalNumber () {

                console.log('computed 执行了!') //用于检测该程序执行了多少次

                let sum=this.list.reduce((num,item)=>num+item.num,0);
                return sum;
            }
        },

        
    })
</script>
</html>

在用户页面打开发者工具,在控制台我们会发现console.log(‘computed 执行了!’)只执行了一次,如果我们使用methods方法中函数,则会重复执行,从而证明了computed确实会缓存计算的结果,当我们在一些大规模的重复计算中,这无疑会大大提高效率,以下是使用computed属性与methods方法的一个对比desc
值得注意的是,computed为属性,所以在{{ }}中使用它的类名时,不需要在最后加(),如{{totalNumber}},但在使用methods方法中的函数时,则需要在{{ }}的最后加(),如{{totalNumber()}};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值