前端-vue基础71-购物车5商品数量的变更

简介: 前端-vue基础71-购物车5商品数量的变更
<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Document</title>
 </head>
 <body>
     <div id="app">
         <div class="container">
             <my-cart></my-cart>
         </div>
     </div>
     <script type="text/javascript" src="./js/vue.js"></script>
     <script>
         var CartTitle = {
             props: ['uname'],
             template: `
             <div class="title">{{uname}}的商品</div>
             `
         }
         var CartList = {
             props: ['list'],
             template: `
             <div>
                     <div :key='item.id' v-for='item in list' class='item'>
                        <div class='name'>{{item.name}}</div>
                        <div class='change'>
                        <a href="">-</a>
                        <input type="text" class="num" :value='item.num' @blur='changeNum(item.id,$event)'>
                        <a href="">+</a>
                        </div>
                         <div class="del" @click='del(item.id)'>X</div>
                 </div>
             </div>
             `,
             methods: {
                 changeNum: function(id, event) {
                     console.log(1);
                     console.log(id, event.target.value);
                     this.$emit('change-num', {
                         id: id,
                         num: event.target.value
                     })
                 },
                 del: function(id) {
                     console.log(id);
                     //把id传给父亲组件
                     this.$emit('cart-del', id);
                 }
             }
         }
         var CartTotal = {
             props: ['list'],
             template: `
             <div class="total">
                     <span>总价{{total}}</span>
                     <button>结算</button>
                 </div>
             `,
             computed: {
                 total: function() {
                     //计算
                     var t = 0;
                     this.list.forEach(item => {
                         t += item.price * item.num;
                     });
                     return t;
                 }
             }
         }
         Vue.component('my-cart', {
             data: function() {
                 return {
                     uname: '张三',
                     list: [{
                         id: 1,
                         name: 'TCL彩电',
                         price: 1000,
                         num: 1,
                     }, {
                         id: 2,
                         name: 'TCL彩电',
                         price: 1000,
                         num: 1,
                     }, {
                         id: 3,
                         name: 'TCL彩电',
                         price: 1000,
                         num: 1,
                     }, {
                         id: 4,
                         name: 'TCL彩电',
                         price: 1000,
                         num: 1,
                     }, {
                         id: 5,
                         name: 'TCL彩电',
                         price: 1000,
                         num: 1,
                     }, ]
                 }
             },
             template: `
             <div class='cart'>
             <cart-title :uname='uname'></cart-title>
             <cart-list :list='list' @change-num='changeNum($event)' @cart-del='delCart($event)'></cart-list>
             <cart-total :list='list'></cart-total>
             </div>
             `,
             components: {
                 'cart-title': CartTitle,
                 'cart-list': CartList,
                 'cart-total': CartTotal,
             },
             methods: {
                 changeNum: function(val) {
                     console.log(val);
                     //根据子组件传递数据更新list对应数据
                     this.list.some(item => {
                         if (item.id == val.id) {
                             item.num = val.num;
                             //终止
                             return true;
                         }
                     });
                 },
                 delCart: function(id) {
                     //根据id删除list数据
                     //找到id对应索引
                     var index = this.list.findIndex(item => {
                         return item.id == id;
                     });
                     //根据索引删除数据
                     this.list.splice(index, 1);
                 }
             }
         })
         var vm = new Vue({
             el: '#app',
             data: {
             }
         })
     </script>
 </body>
 </html>运算结果


相关文章
|
2天前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
7天前
|
JavaScript 前端开发
【前端web入门第一天】03 综合案例 个人简介与vue简介
该网页采用“从上到下,先整体再局部”的制作思路,逐步分析并编写代码实现个人简介页面。内容涵盖尤雨溪的背景、学习经历及主要成就,同时介绍其开发的Vue.js框架特点。代码结构清晰,注重细节处理,如使用快捷键提高效率,预留超链接位置等,确保最终效果符合预期。
|
3天前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
26 3
|
2天前
|
JavaScript 前端开发 API
如何在前端开发中有效管理状态:React vs. Vue
在现代前端开发中,状态管理是一个关键因素,它直接影响到应用的性能和可维护性。React 和 Vue 是当前最流行的前端框架,它们在状态管理方面各有优势和劣势。本文将深入探讨 React 和 Vue 在状态管理中的不同实现,分析它们的优缺点,并提供实际应用中的最佳实践,以帮助开发者选择最适合他们项目的解决方案。
|
16天前
|
前端开发 Java Spring
Spring与Angular/React/Vue:当后端大佬遇上前端三杰,会擦出怎样的火花?一场技术的盛宴,你准备好了吗?
【8月更文挑战第31天】Spring框架与Angular、React、Vue等前端框架的集成是现代Web应用开发的核心。通过RESTful API、WebSocket及GraphQL等方式,Spring能与前端框架高效互动,提供快速且功能丰富的应用。RESTful API简单有效,适用于基本数据交互;WebSocket支持实时通信,适合聊天应用和数据监控;GraphQL则提供更精确的数据查询能力。开发者可根据需求选择合适的集成方式,提升用户体验和应用功能。
47 0
|
16天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
35 0
|
16天前
|
开发者 Android开发 iOS开发
Xamarin开发者的神器!揭秘你绝不能错过的插件和工具,让你的开发效率飞跃式提升
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程,保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用介绍 Xamarin.Forms 的基本功能和工作原理。首先配置 Visual Studio 开发环境,然后创建并运行一个包含标题、按钮和消息标签的示例应用,展示如何定义界面布局及处理按钮点击事件。这帮助开发者快速入门 Xamarin.Forms,提高跨平台应用开发效率。
30 0
|
17天前
|
JavaScript 前端开发 开发者
Vue.js的未来已来:掌握最新功能,驾驭前端开发的新浪潮!
【8月更文挑战第30天】Vue.js作为前端开发领域的明星框架,凭借其轻量级、响应式及组件化特性,深受全球开发者喜爱。它持续进化,引入新功能并优化性能,如提升渲染速度和减小打包体积,增强TypeScript支持,简化组件编写流程,进一步提升应用响应性和加载速度,改善开发者体验。活跃的社区和丰富的开源项目如“vuejs-challenges”推动其不断发展。未来,Vue.js将探索更多新特性,如宏和非虚拟DOM模式,巩固其在现代前端框架中的领先地位。
28 0
|
17天前
|
JavaScript 前端开发 测试技术
Vue.js开发者必看!Vue Test Utils携手端到端测试,打造无懈可击的应用体验,引领前端测试新风尚!
【8月更文挑战第30天】随着Vue.js的普及,构建可靠的Vue应用至关重要。测试不仅能确保应用质量,还能提升开发效率。Vue Test Utils作为官方测试库,方便进行单元测试,而结合端到端(E2E)测试,则能构建全面的测试体系,保障应用稳定性。本文将带你深入了解如何使用Vue Test Utils进行单元测试,通过具体示例展示如何测试组件行为;并通过Cypress进行E2E测试,确保整个应用流程的正确性。无论是单元测试还是E2E测试,都能显著提高Vue应用的质量,让你更加自信地交付高质量的应用。
28 0
|
缓存 JavaScript 前端开发
前端—vue学习
一. vue.js简介
177 0