利用Vue實現一個簡單的購物車功能


開始學習Vue的小白,dalao多多指正

想要實現下面這個界面,包含總價計算、數量增加和移除功能

 

 話不多說代碼如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <title>小購物車</title>
</head>
<body>
<div id="app">
    <table border="2">
        <thead>
            <td>書籍名稱</td>
            <td>書籍名稱</td>
            <td>出版日期</td>
            <td>價格</td>
            <td>購買數量</td>
            <td>操作</td>
        </thead>
        <tbody>
            <tr v-for="(item,index) in books" >
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>{{item.date}}</td>
                <td>{{item.price | showPrice}}</td>
                <td>
                    <button @click="decrement(index)" v-bind:disabled="item.count <= 1">-</button>
                {{item.count}}
                    <button @click="increment(index)">+</button>
                </td>
                <td>
                    <button @click="removeBook(index)">移除</button>
                </td>
            </tr>
        </tbody>
    
    
    </table>
    <font>總價:{{toltalPrice | showPrice}}</font>
    
</div>
<script src="./js/vue.js"></script>
<script>
   const hello = new Vue({
     el:'#app',
     data:{
       message:'Hello Vue !',
       books :[
           {
               id:1,
               name:'編程大法',
               date:'2020-5',
               price:999.00,
               count:1
           },
           {
               id:2,
               name:'編程大法',
               date:'2020-5',
               price:999.00,
               count:1
           },
           {
               id:3,
               name:'編程大法',
               date:'2020-5',
               price:999.00,
               count:1
           },
           {
               id:4,
               name:'編程大法',
               date:'2020-5',
               price:999.00,
               count:1
           }
       ]
     
     
     },
     filters: {
              showPrice(price) {
             return '¥'+price.toFixed(2);
              }
        },
    methods:{
        decrement(index){
            this.books[index].count--;
        },
        increment(index){
            this.books[index].count++;
        },
        removeBook(index){
            this.books.splice(index,1);
        }
        
    },
    computed:{
            toltalPrice(){
                let toltalPrice=0;
                for(let i=0;i<this.books.length;i++){
                    toltalPrice += this.books[i].price * this.books[i].count;
                }
                return toltalPrice;
            }
    }
    
})
</script>
</body>
</html>

v-for:以前用原生javascript寫界面的時候想要呈現出一個列表的效果需要在html中寫多個<tr></tr>、<td></td>、<th></th>標簽,使代碼過於冗余,這就是框架好處之一啊哈哈。

 <tr v-for="(item,index) in books" >
這個寫法使item(books數組的項逐一遍歷),index會記錄數組下標

computed和methods

這也是比較巧妙的地方之一:雖然兩者的內容都可以寫函數,但是不同之處在於computed里的函數在頁面加載時執行一次並且將內容保存在內存中,在下一次使用函數時不用重新調用,直接從內存中拿出來用就行會比methods里的函數節約內存,提高性能,對於頻繁使用的函數可以寫在computed里面,另外寫在標簽中時,computed里的函數只需要寫函數名,methods里的需要寫括號。但是computed會占用內存,所以不頻繁調用的可以寫在methods里面。computed類似於Vue中的屬性,在計算結果發生改變時,結果會動態地發生改變


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM