12前端项目----添加购物车1.0

商品添加购物车

    • 商品数量
    • 添加购物车
    • 浏览器本地存储
      • localStorage
      • sessionStorage
      • 添加成功页面

商品数量

输入为数字,最少为1
<div class="cartWrap"><div class="controls"><input autocomplete="off" class="itxt" v-model.number="skuNum" @input='validateNum'><a href="javascript:" class="plus" @click="skuNum++">+</a><a href="javascript:" class="mins" @click="skuNum>1?sku--:sku=1">-</a></div><div class="add"><a @click="addToCart">加入购物车</a></div>
</div>
data(){return {skuNum:1}
},
  • v-model.number
    初始非数字字符问题:只能保证先输入数字后面的非数字字符能够去除,如果用户首先输入非数字字符(如字母、符号),v-model.number 不会自动过滤,会导致 skuNum 变为 NaN
    小数问题:v-model.number 会保留小数部分,而商品数量通常需要整数
//判断数量输入合法
methods:{validateNum(){//首先确保是数字if(isNaN(this.num)){this.num=1;}//限制最大值和最小值if (this.num < 1) {this.num = 1;} else if (this.num > 99) {this.num = 99;}//去除小数-取整this.num = Math.floor(this.num);}
}

添加购物车

是将产品添加到服务器里,在购物车页面展示的是服务器的数据

接口:用于将产品添加到购物车中,以及可以修改购物车产品数量

//api接口		需要传递商品数量以及商品id
export const reqAddOrUpdateCart = (skuId,skuNum)=>requests({url:`/cart/addToCart/${skuId}/${skuNum}`,method:'post'})

然后就是在仓库封装函数

//detail仓库
const actions = {……,async addToCart({commit},skuId.skuNum){let result = await reqAddOrUpdateCart(skuId,skuNum);console.log(result);}
}

回到Detail组件绑定addToCart派发actions,vuex发送请求

methods:{async addToCart(){try{await this.$store.dispatch('addToCart',this.$route.params.skuId,this.skuNum);//成功则进行路由跳转到购物车this.$router.push(……)}catch(error){alert(error.message);}}
}

注意:加入购物车不需要仓库存储数据,只是将数据带给服务器,写入服务器,并不需要服务器返回数据。

async函数执行返回的是一个promise对象

浏览器本地存储

浏览器本地存储(webStorage)分为localStoragesessionStorage

  • sessionStorage浏览器一关则数据就清空了,表示会话结束
    但loaclStorage还存在,用户调用clear()的API或者主动清空缓存才会没
  • getItem(),如果value找不到,则会返回null
    (JSON.parse(null)结果仍为null)

localStorage

  1. 存储key-value----localStorage.setItem(key,value)
 //key和value都是字符串const p = {name:'Stella',age:21};
localStorage.setItem('msg','hello1');
//localStorage.setItem('person',p);//value为[object Object]--变成字符串形式
localStorage.setItem('person',JSON.stringify(p));//{"name":"Stella","age":21}	
//没有则是null
  1. 获取value----localStorage.getItem(key)
const value = localStorage.getItem('msg');//hello1
const p = JSON.parse(localStorage.getItem('person'));
  1. 移除key-value----localStorage.removeItem(key)
  2. 清空本地存储数据----localStorage.clear()

sessionStorage

  1. 存储key-value----sessionStorage.setItem(key,value)
const p = {name:'Stella',age:21};
sessionStorage.setItem('msg','hello1');
//sessionStorage.setItem('person',p);//value为[object Object]--变成字符串形式
sessionStorage.setItem('person',JSON.stringify(p));//{"name":"Stella","age":21}	
//没有则是null
  1. 获取value----sessionStorage.getItem(key)
const value = sessionStorage.getItem('msg');//hello1
const p = JSON.parse(sessionStorage.getItem('person'));
  1. 移除key-value----sessionStorage.removeItem(key)
  2. 清空本地存储数据----sessionStorage.clear()

localStorage和sessionStorage的API起始一样,只是存储方式不同,本地存储时持久化的,需要手动;会话存储并非持久的,会话结束数据就消失
浏览器本地存储功能localStorage和sessionStorage,是HTML5新增

添加成功页面

项目中点击添加购物车会展示添加成功页面,每添加一次就会展示一次该商品的信息添加成功。在这个过程中每个商品添加成功的过程只展现一次,然后是点击到购物车付款。

  • 从商品页到添加购物车成功页,如何将商品信息传递过去?
  • 通过路由传参?商品信息是个对象,对象里面有大量数据,那样路由地址很不清晰
  • 通过将商品信息存储在会话存储中,当添加成功页面展示时调取会话中的数据。会话结束了数据就会消失。

注意key,value都是字符串,需要将对象转换成字符串JSON.stringify(),获取又将字符串转为对象JSON.parse()

点击添加购物车按钮事件中将商品信息存储在会话中sessionStorage.setItem('skuInfo',JSON.stringify(this.skuInfo))
在成功添加页面computed计算出属性,获取数据JSON.parse(sessionStorage.getItem('skuItem'))然后展示数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EasyRTC嵌入式音视频通信SDK助力视频客服,开启智能服务新时代

一、背景 在数字化服务浪潮下&#xff0c;客户对服务体验的要求日益提升&#xff0c;传统语音及文字客服在复杂业务沟通、可视化指导等场景下渐显不足。视频客服虽成为企业服务升级的关键方向&#xff0c;但普遍面临音视频延迟高、画质模糊、多端适配难、功能扩展性差等问题&a…

干货分享|MaxKB智能问数方案及步骤详解

DeepSeek-R1的发布掀起了AI智能变革的浪潮。在过去几个月里&#xff0c;MaxKB开源企业级AI助手已经帮助大量企业和组织快速落地了DeepSeek&#xff0c;让AI在不同的行业土壤中产生持续、可度量的业务价值。 MaxKB&#xff08;github.com/1Panel-dev/MaxKB&#xff09; 可以为本…

【python】数据类型小结

1.数据类型 int、float、str、bool、元组tuple、列表list、字典dict、集合set 分为两类&#xff1a;可变和不可变数据类型 2.可变数据类型和不可变数据类型 当变量的值变化&#xff0c;内存地址不变则为可变数据类型&#xff0c; eg&#xff1a;int、float、bool、字符串st…

泰山派常用命令

0.连接adb 设备列表&#xff1a;adb devices 进入命令&#xff1a;adb shell 1.连接WiFi 查看当前网络&#xff1a;nmcli con show 我的WiFi名称&#xff1a;6 我的WiFi密码&#xff1a;12345789 连接当前网络&#xff1a;nmcli device wifi connect 6 password 1234578…

whois为什么有时会返回两个不同的域名状态

前阵子发现一直想注册但被别人注册了的一个域名快要过期了&#xff0c;就想着写个脚本跑在电脑上&#xff0c;每分钟检查一次域名状态&#xff0c;一旦域名被正式删除&#xff0c;就发封邮件通知我&#xff0c;这样就不用频繁手动检查域名状态了。 写脚本时发现一个有趣的现象…

NGINX ngx_http_addition_module 模块响应体前后注入内容

一、模块概述 模块名称&#xff1a;ngx_http_addition_module引入版本&#xff1a;自 0.7.9 起支持 addition_types&#xff0c;0.8.29 起支持“*”通配&#xff1b;功能&#xff1a;对符合 MIME 类型的响应&#xff0c;在响应体前后分别插入指定子请求 URI 返回的内容&#x…

半监督学习与强化学习的结合:新兴的智能训练模式

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4o-mini模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…

复习Vue136~180

1.使用create-vue创建项目 npm init vuelatest 项目目录和关键文件&#xff1a; new Vue() 创建一个应用实例 > createApp()、createRouter() createStore() 、将创建实例进行了封装&#xff0c;保证每个实例的独立封闭性。 禁用vue2的插件vuter 使用vue3的插件volar scrip…

QT采用mqtt进行通信(17.1)

文章目录 1.试错历程2. qt5.8安装3. 开始搞了4. 测试连接mqtt broker1.试错历程 尝试过网上说的各种版本,官方库和第三方库,试过qt5.9.9, qt5.12, qt5.12.2, qt5.14 等各个版本,都能编译通过,调用mqtt库,但是都不能连接成功,真的是试吐了,不知道他们的为什么都能成功,…

西门子PLC结构化编程_水处理系统水泵多备多投

文章目录 前言一、功能概述二、程序编写1. 需求分析2. 编写运行时间累计功能块3. 创建自定义数据类型1. 时间排序数据类型2. 多备多投数据类型3. 多备多投切换数据类型 4. 编程1. 创建DB数据块1. 多备多投数据块2. 多备多投切换数据块 2. 创建FB功能块 三、程序调用总结 前言 …

QT:自定义ComboBox

实现效果: 实现combobox的下拉框区域与item区域分开做UI交互显示。 支持4种实现效果,如下 效果一: 效果二: 效果三: 效果四: 实现逻辑: ui由一个toolbutton和combobox上下组合成,重点在于combobox。 我设置了4种枚举,ButtonWithComboBox对应效果一;OnlyButt…

VS2022+OpenCasCade配置编译

一、Open CASCADE Technology介绍及安装&#xff08;windows10&#xff09; Open CASCADE Technology&#xff08;简称OCCT&#xff09;是一款开源的 3D CAD/CAM/CAE 软件开发平台&#xff0c;广泛应用于工业设计、工程仿真、制造等领域。开源OCC对象库是一个面向对象C类库&…

【OSG学习笔记】Day 12: 回调机制——动态更新场景

UpdateCallback 在OpenSceneGraph&#xff08;OSG&#xff09;里&#xff0c;UpdateCallback是用来动态更新场景的关键机制。 借助UpdateCallback&#xff0c;你能够实现节点的动画效果&#xff0c;像旋转、位移等。 NodeCallback osg::NodeCallback 是一个更通用的回调类&…

全新升级:BRAV-7601-T003高性能无风扇AI边缘计算系统,助力智能未来!

在数字化与智能化飞速发展的今天&#xff0c;AI边缘计算正成为各行各业的核心驱动力。BRAV-7601作为一款高性能无风扇AI边缘计算系统&#xff0c;凭借其强大的硬件配置与丰富的扩展能力&#xff0c;为车路协同、特种车辆车载、机器视觉、医疗影像等领域提供了卓越的解决方案。最…

删除 Git 远程记录并重新设置

删除 Git 远程记录并重新设置 以下是在 Windows 平台上删除当前项目的 Git 远程记录并重新设置远程存储库的步骤&#xff1a; 步骤一&#xff1a;查看当前远程仓库 首先&#xff0c;检查当前设置的远程仓库&#xff1a; git remote -v这会显示所有已配置的远程仓库及其 URL…

有哪些和PPT自动生成有关的MCP项目?

随着AI技术的快速发展, Model Context Protocol(MCP) 作为一种连接大型语言模型(LLMs)与外部工具的开放协议,正在重塑自动化办公领域。在PPT自动生成场景中,MCP通过标准化接口实现了AI模型与设计工具、数据源的无缝整合。以下从技术框架、项目案例、应用场景三个维度展开…

PostgreSQL psql 命令和常用的 SQL 语句整理

PostgreSQL psql 命令和常用的 SQL 语句整理 1、登录PostgreSQL数据库2、psql 命令3、数据库操作4、模式操作5、表操作6、数据操作7、索引操作8、视图操作9、权限操作 1、登录PostgreSQL数据库 在系统的命令行界面&#xff08;如 Windows 的 cmd 或者 PowerShell、Linux 的终端…

【unity游戏开发入门到精通——UGUI】文本输入控件 —— InputField旧控件

注意&#xff1a;考虑到UGUI的内容比较多&#xff0c;我将UGUI的内容分开&#xff0c;并全部整合放在【unity游戏开发——UGUI】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言1、文本输入控件2、InputField旧文本输入控件组成 一、InputField文本输入…

获得ecovadis徽章资格标准是什么?ecovadis评估失败的风险

EcoVadis徽章资格标准 EcoVadis徽章是对企业在可持续发展&#xff08;环境、劳工与人权、商业道德、可持续采购&#xff09;方面表现的认可。获得徽章需满足以下条件&#xff1a; 完成评估&#xff1a; 企业必须完成EcoVadis的问卷评估&#xff0c;并提交所有必要文件。 评分…

Python初学 有差异的知识点总结(一)

目录 一、基础语法规则 1.注释 2.代码编写 二、基础语法 1.变量 2.数据类型 3.数据类型的转换 &#xff08;1&#xff09;隐式转换 &#xff08;2&#xff09;显示转换 4.标识符 5.运算符 6.字符串 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;拼接 …