"vue js shop"
Bootstrap 3.0.0 Snippet by evarevirus

<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> <script src="//code.jquery.com/jquery-1.11.1.min.js"></script> <!------ Include the above in your HEAD tag ----------> <!DOCTYPE html><html lang='en' class=''> <head><script src='//production-assets.codepen.io/assets/editor/live/console_runner-079c09a0e3b9ff743e39ee2d5637b9216b3545af0de366d4b9aad9dc87e26bfd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/events_runner-73716630c22bbc8cff4bd0f07b135f00a0bdc5d14629260c3ec49e5606f98fdd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/css_live_reload_init-2c0dc5167d60a5af3ee189d570b1835129687ea2a61bee3513dee3a50c115a77.js'></script><meta charset='UTF-8'><meta name="robots" content="noindex"><link rel="shortcut icon" type="image/x-icon" href="//production-assets.codepen.io/assets/favicon/favicon-8ea04875e70c4b0bb41da869e81236e54394d63638a1ef12fa558a4a835f1164.ico" /><link rel="mask-icon" type="" href="//production-assets.codepen.io/assets/favicon/logo-pin-f2d2b6d2c61838f7e76325261b7195c27224080bc099486ddd6dccb469b8e8e6.svg" color="#111" /><link rel="canonical" href="https://codepen.io/xristian/pen/awpVVW?depth=everything&order=popularity&page=78&q=vue&show_forks=false" /> <link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'> <style class="cp-pen-styles">.container{ padding:20px; max-width:600px; } .input-qty { width: 60px; float: right } .table-cart > tr > td { vertical-align: middle !important; } </style></head><body> <div id="app" class="container"> <div class="text-right"><button class="btn btn-primary" data-toggle="modal" data-target="#cartModal">Cart ({{cartItems.length}})</button></div> <!-- Modal --> <div class="modal fade" id="cartModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">Cart</h4> </div> <div class="modal-body"> <shopping-cart inline-template :items="cartItems"> <div> <table class="table table-cart"> <tr v-for="(item, index) in items"> <td>{{item.title}}</td> <td style="width:120px">QTY: <input v-model="item.qty" class="form-control input-qty" type="number"> </td> <td class="text-right">${{item.price | formatCurrency}}</td> <td> <button @click="removeItem(index)"><span class="glyphicon glyphicon-trash"></span></button> </td> </tr> <tr v-show="items.length === 0"> <td colspan="4" class="text-center">Cart is empty</td> </tr> <tr v-show="items.length > 0"> <td></td> <td class="text-right">Cart Total</td> <td class="text-right">${{Total | formatCurrency}}</td> <td></td> </tr> </table> </div> <!-- /.container --> </shopping-cart> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </div> </div> </div> <div class="container"> <div class="row"> <div class="col-xs-3 text-center" v-for="item in items"> <img class="img-responsive" :src="item.image" alt=""> <h5>{{item.title}}</h5> <h6>${{item.price | formatCurrency}}</h6> <p class="text-center"><input v-model="item.qty" type="number" class="form-control" placeholder="Qty" min="1"/></p> <button @click="addToCart(item)" class="btn btn-sm btn-primary">Add to Cart</button> </p> </div> </div> </div> </div> <script src='//production-assets.codepen.io/assets/common/stopExecutionOnTimeout-b2a7b3fe212eaa732349046d8416e00a9dec26eb7fd347590fbced3ab38af52e.js'></script><script src='https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.10/vue.min.js'></script><script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script><script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js'></script> <script >const products = [ {id: 1,title: 'Macbook Pro', price: 2500.00, qty: 1, image: 'http://lorempixel.com/150/150/'}, {id: 2,title: 'Asus ROG Gaming',price: 1000.00, qty: 1,image: 'http://lorempixel.com/150/150/'}, {id: 3,title: 'Amazon Kindle',price: 150.00,qty: 1,image: 'http://lorempixel.com/150/150/'}, {id: 4,title: 'Another Product',price: 10, qty: 1, image: 'http://lorempixel.com/150/150/'}, ]; function formatNumber(n, c, d, t){ var c = isNaN(c = Math.abs(c)) ? 2 : c, d = d === undefined ? '.' : d, t = t === undefined ? ',' : t, s = n < 0 ? '-' : '', i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))), j = (j = i.length) > 3 ? j % 3 : 0; return s + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ''); }; Vue.filter('formatCurrency', function (value) { return formatNumber(value, 2, '.', ','); }) Vue.component('shopping-cart', { props: ['items'], computed: { Total: function() { var total = 0; this.items.forEach(item => { total += (item.price * item.qty); }); return total; } }, methods: { removeItem(index) { this.items.splice(index, 1) } } }) const vm = new Vue({ el: '#app', data: { cartItems: [], items : products }, methods: { addToCart(itemToAdd) { var found = false; // Check if the item was alread added to cart // If so them add it to the qty field this.cartItems.forEach(item => { if (item.id === itemToAdd.id) { found = true; item.qty += itemToAdd.qty; } }); if (found === false) { this.cartItems.push(Vue.util.extend({}, itemToAdd)); } itemToAdd.qty = 1; } } }) //# sourceURL=pen.js </script> </body></html>

Related: See More


Questions / Comments: