Vue基础篇-计算属性

Vue基础篇

第三章 计算属性

3.1 什么是计算属性

模板内的表达式常用于简单的运算,当其过长或者逻辑复杂时,会难以维护
计算属性可以解决该类问题。
比如:
<div>{{text.split(',').reverse().join(',')}}</div>

<body>
    <div id="app">
    <div>{{newtext}}</div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            // el: document.getElementById('app'),
            data() {
                return {
                    text: '123,456'
                }
            },
            computed:{
               newtext:function(){
               return this.text.split(',').reverse().join(',')
               }
            }
        })
    </script>
</body>
所有的计算属性都以函数的形式写在vue实例内的computed选项内最终返回计算后的结果

3.2 计算属性的用法

在计算属性里面可以完成各种复杂的逻辑,包括运算,函数调用等
只要最终返回一个结果就可以了。

计算属性还可以依赖多个Vue实例的数据,只要其中任一数据发生改变
计算属性就会重新执行,视图也会更新。

例如计算属性常用的地方是购物车内商品的计算
<body>
    <div id="app">
        <ul>
            <li v-for="item in package1" :key="item.name">
                <span>{{item.name}}</span>
                <span>{{item.count}}</span>
                <span>{{item.count*item.price}}</span>
                <button @click="handld(item)">-1</button>
                <button @click="item.count++">+1</button>
            </li>
        </ul>
        <span>{{prices}}</span>
    </div>
   <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            // el: document.getElementById('app'),
            data() {
                return {
                    package1: [{
                            name: 'ipone7',
                            price: 7199,
                            count: 2,
                        },
                        {
                            name: 'ipad',
                            price: 2888,
                            count: 1
                        },
                        {
                            name: 'apple',
                            price: 7199,
                            count: 2
                        },
                        {
                            name: 'ipone8',
                            price: 7199,
                            count: 2
                        },
                    ]
                }
            },
            methods: {
                handld(item) {
                    if (item.count<=0) {
                        item.count=0
                    }else{
                       item.count--
                    }
                }
            },
            computed: {
                prices: function () {
                    var prices = 0;
        for (let i = 0; i < this.package1.length; i++) {
       prices += this.package1[i].price * this.package1[i].count
                    }
                    return prices
                }
            },

        })
    </script>
</body>
当点击+-按钮是数量会发生改变,相应的价格和总价prices也会随之发生改变。

3.3计算属性缓存

<body>
    <div id="app">
        {{newText1()}}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            // el: document.getElementById('app'),
            data() {
                return {
                   text:'123,456' 
                }
            },
            methods: {
                newText(){
                  return  this.text.split(',').reverse().join(',') 
                }
            },
            // computed: {
            //  newText: function () {
            //   return this.text.split(',').reverse().join(',')
            //     }
            // },

        })
    </script>
</body>
没有使用计算属性,在methods里面定义一个方法也能够实现相同的效果
甚至该方法还可以接收参数,使用起来更灵活

但是既然使用methods能够实现,使用computed有什么用呢?
使用计算属性和methods取决于是否需要缓存,当遍历大数组和大量计算时
应该使用计算属性,除非并不希望数据缓存。
发布了42 篇原创文章 · 获赞 29 · 访问量 3895

猜你喜欢

转载自blog.csdn.net/weixin_43279985/article/details/104203051
今日推荐