vue图书小案例

小知识点:

vue中计算属性有缓存(对象属性变化时才会更新),方法没有缓存,所以计算属性比方法效率高
js中let有块级作用域,var没有块级作用域,所以var是有缺陷的
this.letters[0] = 'bb'; //vue中,这种做法并不是响应式的;推荐使用响应式方法:this.letters.splice(0,1,'cc');

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<body>
<div id="app">
    <ul v-if="books.length">
        <ul>
            <li v-for="(v,k) in books">
                <button @click="add(k,false)" :disabled="v.num <= 1">-</button>
                <input type="text" :value="v.num">
                <button @click="add(k,true)">+</button>

                <div>{{v.name}}</div>
                <div>{{v.price * v.num | showPrice}}</div>

                <button @click="rm(k)">移除</button>
            </li>
        </ul>
        总价{{total_price | showPrice}}
    </ul>

    <div v-else>当前没有图书</div>
</div>
</body>
<script>
    let v = new Vue({
        el : "#app",
        data : {
            books : [
                {
                    name : '天龙八部',
                    price : 33,
                    num : 1,
                },
                {
                    name : '鹿鼎记',
                    price : 13,
                    num : 1,
                },        
            ]
        },
        methods : {
            add : function(k,boo){
                let obj = this.books[k];
                if(boo) {
                    obj.num+=1;
                }else{
                    obj.num-=1;
                }
                //this.books.splice(k,k+1,obj);
            },
            rm : function(k){
                this.books.splice(k,1);
            }
        },
        // 计算属性
        computed : {
            total_price : function(){
                let total = 0;
                for(let i = 0;i < this.books.length;i++ ){
                    total += (this.books[i].price * this.books[i].num);
                }
                return total;
            }
        },
        // 过滤器
        filters : {
            showPrice : function(price){
                return '$' + price.toFixed(2);
            }
        }
    })
</script>
</html>

 

posted @ 2020-01-26 21:27  cl94  阅读(280)  评论(0编辑  收藏  举报