Web

computed之计算属性

2020-07-07  本文已影响0人  瑟闻风倾

计算属性:在模版中可以直接通过插值语法显示一些data中的数据,但有时我们可能需要对数据进行一些处理和转化后再显示,或者需要将多个数据结合起来进行显示,此时就要用到计算属性。

(1) 计算属性的getter和setter

计算属性一般只使用getter来读取,在某些情况下可以提供一个setter方法(不常用)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
    <div id="app">
        <h2>{{fullName}}</h2>
    </div>
</body>
<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            firstName:"ya",
            lastName:"yang"
        },
        computed:{
            fullName: {
                set: function(newValue){
                    console.log("----",newValue)
                    const names = newValue.split(' ')
                    this.firstName = names[0]
                    this.lastName = names[1]
                },
                get: function(){
                    return this.firstName + ' ' + this.lastName
                }
            },
        }
    });
</script>
</html>

计算属性一般没有set方法,此时为只读属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
    <div id="app">
        <h2>{{fullName}}</h2>
    </div>
</body>
<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            firstName:"ya",
            lastName:"yang"
        },
        computed:{
            // 计算属性一般没有set方法,此时为只读属性
            fullName:function(){
                return this.firstName + ' ' + this.lastName
            }
        }
    });
</script>
</html>

(2) 计算属性的缓存(对比computed和methods)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
    <div id="app">
        <!-- 1. 直接拼接:语法过于繁琐 -->
        <h2>{{firstName + ' ' + lastName}}</h2>
        <h2>{{firstName}} {{lastName}}</h2>
        <!-- 2. 通过定义methods -->
        <h2>{{getFullName()}}</h2>
        <!-- 3. 通过计算属性computed -->
        <h2>{{fullName}}</h2>
    </div>
</body>
<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            firstName:"ya",
            lastName:"yang"
        },
        /* computed中定义计算属性(计算属性定义的格式和方法定义一样): 计算属性有缓存,性能更好,优选计算属性*/
        computed:{
            fullName:function(){
                return this.firstName + ' ' + this.lastName
            }
        },
        /* methods中定义方法: methods中方法调用几次就计算几次,性能没有计算属性好*/
        methods:{
            getFullName:function(){
                return this.firstName + ' ' + this.lastName
            }
        }
    });
</script>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
    <div id="app">
        <h2>总价:{{books[0].price + books[1].price + books[2].price + books[3].price}}</h2>
        <h2>总价:{{getTotalPrice()}}</h2>
        <h2>总价:{{totalPrice}}</h2>
    </div>
</body>
<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            books:[
                {id:1,name:"红楼梦",price:60},
                {id:2,name:"西游记",price:62},
                {id:3,name:"水浒传",price:63},
                {id:4,name:"三国演义",price:64},
            ]
        },
        computed:{
            totalPrice:function(){
                let result = 0
                for (let i = 0; i < this.books.length; i++) {
                    result += this.books[i].price;
                }
                return result
            }
        },
        methods:{
            getTotalPrice:function(){
                let result = 0
                for (let i = 0; i < this.books.length; i++) {
                    result += this.books[i].price;
                }
                return result
            }
        }
    });
</script>
</html>

为什么要使用计算属性:computed和methods看起来都可以实现我们的功能,但是计算属性会进行缓存,多次使用时计算属性只会调用一次,性能更高,所以优选使用计算属性。

上一篇下一篇

猜你喜欢

热点阅读