Vue.js 基础学习计算属性computed

我们要写一个成绩表如下

数学 90
物理 80
英语 70

 

<div id="app">
<table border="1">
<tr>
<td>数学</td>
<td>{{ math }}</td>
</tr>
<tr>
<td>物理</td>
<td>{{ physics }}</td>
</tr>
<tr>
<td>英语</td>
<td>{{ english }}</td>
</tr>
</table>
</div>
var app = new Vue({
        el : '#app',
        data : {
            math : 90,
            physics : 80,
            english : 70,
        }
    });

接下来我们要添加总分和平均分,

<tr>
                <td>总分</td>
                <td>{{math + physics + english}}</td>
            </tr>
            <tr>
                <td>平均分</td>
                <td>{{ Math.round((math + physics + english)/3) }}</td>
            </tr>

这时我们在td中加的东西很多,这样很不好,这时Vue提供了一个计算属性computed

为了方便观察我们同时将tr中的内容换成input来观察动态变化

<div id="app">
        <table border="1">
            <tr>
                <td>数学</td>
                <td><input type="text" v-model="math"></td>
            </tr>
            <tr>
                <td>物理</td>
                <td><input type="text" v-model="physics"></td>
            </tr>
            <tr>
                <td>英语</td>
                <td><input type="text" v-model="english"></td>
            </tr>
            <tr>
                <td>总分</td>
                <td>{{ sum }}</td>
            </tr>
            <tr>
                <td>平均分</td>
                <td>{{ average }}</td>
            </tr>
        </table>
    </div>
var app = new Vue({
        el : '#app',
        data : {
            math : 90,
            physics : 80,
            english : 70,
        },
        computed : {
            sum : function(){
                return this.math + this.physics + this.english;
            },
            average : function() {
                return Math.round(this.sum/3);
            }
        }
    });

在app中加入computed 这时我们就可以动态的观察各科分数改变总分和平均分对应改变,但是由于input中输入内容会被自动转换成字符串类型,所以我们应该保证它是number类型,我们可以使用v-model的number修饰符,也可以在数据上进行处理,v-model上加修饰符就不说了,在computed中的sum对应的方法中给每个数据加一个parseFloat转换为number,

computed : {
            sum : function(){
                return parseFloat(this.math) + parseFloat(this.physics) + parseFloat(this.english);
            },
            average : function() {
                return Math.round(this.sum/3);
            }
        }

这时,改变各科成绩就可以看到总分平均分对应的改动了。

posted @ 2017-09-03 16:18  hz海内存知己  阅读(288)  评论(0编辑  收藏  举报