vue---------商城pc端 购物车模块

2023-11-18

目录

uuid

some 与 every

switch语句 

HTTP的8种请求方式

Promise.all的用法及其细节


uuid

uuid生成随机id

npm install uuid  下载

生成随机且唯一的游客身份

import { v4 as uuidv4 } from 'uuid';//创建一个uuid
//生成一个随机的字符串作为用户身份 且每次不会变
export const getUUID=()=>{
  //先从本地存储获取uuid
  let uuid_token=localStorage.getItem('UUIDTOKEN')
  // 如果没有生成游客临时身份
  if(!uuid_token){
    uuid_token=uuidv4()
    localStorage.setItem('UUIDTOKEN',uuid_token)
  }
  return uuid_token
}

 vue中调用保存uuid

// Detail 组件的小仓库
//封装游客模块uuid--生成一个随机字符串
import{getUUID} from '../../utils/uuid_token'
import axios from '@/api'
const state = {
  goodInfo: {},
  //游客临时身份
  uuid_token:getUUID()
}
const mutations = {
  getGoodInfo(state, payload) {
    state.goodInfo = payload
  }
}
const actions = {
  //获取产品信息
  async AsyncgetGoodInfo({
    commit
  }, skuId) {
    let {
      code,
      data
    } = await axios.reqDetailInfo(skuId)
    if (code != 200) return
    commit('getGoodInfo', data)
  },
  async AsyncAddOrUpdataShopCart({
    commit
  }, {
    skuId,
    skuNum
  }) {
    let result = await axios.reqAddOrUpdataShopCart(skuId, skuNum)
    //代表服务器加入购物车成功
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('false'))
    }

  }
}

const getters = {
  categoryView(state) {
    return state.goodInfo.categoryView || {}
  },
  skuInfo(state) {
    return state.goodInfo.skuInfo || {}
  },
  spuSaleAttrList(state) {
    return state.goodInfo.spuSaleAttrList || []
  }
}
export default {
  state,
  mutations,
  actions,
  getters
}

设置请求头携带uuid

// 对axios二次封装
import axios from 'axios'

//引入进度条 start进度条开始 done:进度条结束
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'


// 利用axios对象方法的created,创建一个axios实例
const requests = axios.create({
    //配置对象
    // 基础路径,发送请求的时候路径中会出现api
    baseURL: '/api',
    //请求超时时间 5s
    timeout: '5000',
})
//请求拦截器
requests.interceptors.request.use((config) => {
    // config配置对象 header请求头
    //进度条开始
    nprogress.start()
    return config
})
//响应拦截器
requests.interceptors.response.use((res) => {
    //成功的回调函数
    //进度条结束
    nprogress.done()
    return res.data
}, (error) => {
    //响应失败的回调函数
    return Promise.reject(new Error('false'))
})
export default requests

some 与 every

1.every()方法,针对数组中的每一个元素进行比对,只要有一个元素比对结果为false则返回false,反之要所有的元素比对结果为true才为true

var a = [1,2,3,4,5,6];
var b = a.every(function(x){
    return x < 8;
});
var c = a.every(function(x){
    return x < 5;
})
console.log(b); //这里返回true
console.log(c); //这里返回false


2.some()方法,同样是针对数组中的每一个元素,但是这个方法是,只要有一个元素比对结果为true,返回结果就为true,反之要所有的元素比对结果为false才为false

var a = [1,2,3,4,5,6]
var b = a.some(function(x){
        return x > 10;
    })
var c = a.some(function(x){
        return x > 5;
    })
console.log(b) //这里返回false
console.log(c) //这里返回true

switch语句 

witch 语句用于基于不同的条件来执行不同的动作。

JavaScript Switch 语句  请使用 switch 语句来选择要执行的多个代码块之一。

工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。

default 关键词
请使用 default 关键词来规定匹配不存在时做的事情:

switch (day)
{
case 6:
  x="Today it's Saturday";
  break;
case 0:
  x="Today it's Sunday";
  break;
default:
  x="Looking forward to the Weekend";

}

项目应用

   async handle(type, num, cart) {
        //标记 数量(变化量,和输入的值, 商品数组)
        switch (type) {
          // 加号
          case 'add':
            num = 1
            break
            // 减号
          case 'minus':
            //判断用户的个数大于1给服务器传-1小于等会于1给服务器0
            num = cart.skuNum > 1 ? -1 : 0;
            break
          case 'change':
            // 如果用户输入非法值给服务器0
            if (isNaN(num) || num < 1) {
              num = 0
            } else {
              // 正确情况小数取整 带给服务器的变化量 用户输入进来的值-产品起始个数
              num = parseInt((num) - cart.skuNum)
            }
            break
        }
        try {
          await this.$store.dispatch('AsyncAddOrUpdataShopCart', {
            skuId: cart.skuId,
            skuNum: num
          })
          this.getData()
        } catch (err) {}
      }
    

HTTP的8种请求方式

HTTP是超文本传输协议,其定义了客户端和服务器端之间文本传输的规范。HTTP默认使用80端口,这个端口指的是服务器端的端口,而客户端的端口是动态分配的。HTTP请求的方法:

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

1、OPTIONS

返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

2、HEAD

向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

3、GET

向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

4、POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

5、PUT

向指定资源位置上传其最新内容

6、DELETE

请求服务器删除Request-URL所标识的资源

7、TRACE

回显服务器收到的请求,主要用于测试或诊断

8、CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

Promise.all的用法及其细节

Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。可以将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.all([p1, p2, p3]);


上面代码中,Promise.all方法接受一个数组作为参数,p1、p2、p3都是 Promise 实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为 Promise 实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。)

p的状态由p1、p2、p3决定,分成两种情况。

只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

项目实战

  • 通过删除单个商品接口删除全部商品
  •    context小仓库上下文 commit【提交 mutations】 getters【计算属性】 dispatch【派发actions】 state【当前仓库的数据】
  • 每次派发单个商品接口 会返回一个promis  使用promis.all监听状态 全部成功才为成功
  • 页面async await 等待全部成功 使用try chtch 接收失败成功
 async deleteCartList({commit},skuId){
    let{code}=await axios.deleteCartList(skuId)
    if(code==200){
      return 'ok'
    }else{
      return Promise.reject(new Error('false'))
    }
  },

 deleteAllChecked({dispatch,getters}){
    //context小仓库上下文 commit【提交 mutations】 getters【计算属性】 dispatch【派发actions】 state【当前仓库的数据】
    //获取购物车的全部数据
let promiseAll=[]
let list=getters.cardlist.cartInfoList
list.forEach(item=>{
  console.log(item);
  //返回一个promis,每一次添加到新数组中
   let result =item.isChecked==1?dispatch('deleteCartList',item.skuId):''
   promiseAll.push(result)
})
//全部的promise成功就是成功,有一个失败就失败
return Promise.all(promiseAll)
  }
}
-------------------------------页面--------------------------
  async deleteAll() {

        try {
          await this.$store.dispatch('deleteAllChecked')
          this.getData()
        } catch (err) {
          console.log(err.message);
        }
      }

    },


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue---------商城pc端 购物车模块 的相关文章

  • 通过pm2运行node.js,但经常重新启动:通过信号[SIGINT]以代码[0]退出

    我试图在我的系统上运行 node js 但遇到了这个问题 2016 06 01 20 46 28 App app with id 13 and pid 12633 exited with code 0 via signal SIGINT 2
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 打开 md-calendar 时滚动到当前日期

    目前正在构建一个使用 Angular Material 的应用程序 我们需要一个 md calendar 组件 我们想要自定义按钮样式和内容 因此不使用普通的 md datepicker 问题是 当 md calender 打开时 滚动位置
  • 如何设置vite.config.js基本公共路径?

    我正在尝试设置一个base url对于我的开发和生产环境 但是vitejs配置未解决 根据vitejs https vitejs dev config 您可以在配置选项中设置在开发或生产中提供服务时的基本公共路径 当从命令行运行 vite
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • 在 jQuery 可排序中对多个选定项目进行排序?

    我试图在 jQuery 可排序集中选择多个项目 然后将选定的项目一起移动 这是我的弱点开始尝试使其发挥作用 http jsfiddle net benstenson CgD8Y 这是代码 HTML div class container d
  • jQM / jquery-collagePlus 使用问题

    我正在使用 jQM 构建应用程序 并且尝试使用 jquery collagePlus http ed lea github io jquery collagePlus http ed lea github io jquery collage
  • console.log() 显示同一对象属性的矛盾值

    我想我可能要疯了 我使用 console log 来查看对象的状态 然后在下一行对同一对象的特定属性执行 console log 并为每个属性获取不同的值 我正在使用的代码是 console log this pictures Items
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • 强制输入数字小数位

    我想强制
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定

随机推荐

  • Linux虚拟机启用时,出现:‘VMware虚拟机中出现无法将(系统文件路径)文件当做CD-ROM映像进行连接。

    启用Linux时 出现如下错误 解决方法 请先关闭虚拟 不然无法选择文件路径 第一步 点击CD DVD IDE 查看所在文件路径是否正确 第二步 选择启动时连接 选择自己所使用的ISO影像文件 M 修改到自己所在的路径 然后重启虚拟机 即可
  • MySQL数据库 之 插入、更新与删除数据

    欢迎大家扫码关注我的微信公众号 一 插入数据 MySQL 中使用 insert 语句来向数据库表中插入新的数据记录 为表的所有字段插入数据 insert into tb name col list values value list 创建一
  • 蓝桥杯-排列序数

    题目 标题 排列序数 如果用a b c d这4个字母组成一个串 有4 24种 如果把它们排个序 每个串都对应一个序号 abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bacd 6 badc 7 bcad
  • 关于HFile的存储结构梳理以及快速定位rowkey

    为什么80 的码农都做不了架构师 gt gt gt 一 HFile结构介绍 为了支持数据的随机查询 HFile结构分为六个部分 1 数据块 保存表中的数据 每一个数据块由块头和一些keyValue record 组成 key的值是严格按照顺
  • Ubuntu18.04安装CUDA11.3和cuDNN8.2.0

    今天在服务器上跑代码 发现报错 说是CUDA版本不对 然后看了一下服务器的版本 发现是9 0 这就有问题了啊 3090的显卡得用11 0上的版本啊 所以接着配置一下深度学的环境 记录一下方便以后查阅 Ubuntu18 04安装CUDA11
  • cocos2dx跨平台直播实例-ffmpeg-ios篇

    一 环境 mac 10 12 2 cocos2dx 3 13 1 ffmpeg 3 0 二 新建项目和编译库 cocos2dx按照官网新建一个实例 ffmpeg编译ios库http blog csdn net u013654125 arti
  • delphi取得文件图标并在TListView中显示

    delphi取得文件图标并在TListView中显示 技术要点 一 使用SHGetFileInfo函数获取指定扩展名的文件图标 需要引用ShellAPI单元 二 使用TStringList来保存扩展名与其图标的索引号 当添加一个文件名至TL
  • Linux 虚拟化网络技术 — 虚拟网络协议栈

    前言 本文通过 OpenStack Neutron L3 Agent 实现的 Linux 虚拟路由器来描述 Linux 的虚拟网络协议栈 Neutron L3 agent 概述 Neutron L3 agent 服务 运行在 OpenSta
  • ubutun18.04安装Ros-melodic

    在Mac下使用虚拟机VMware Fusion安装了Ubuntu18 04系统 并在Ubuntu系统安装Ros 按照版本要求18系统对应Ros melodic 鉴于在网上很少在Mac上装Ros melodic 以该文章以记录安装的过程 一
  • 数组的对数器

    原创是某客的左程云老师 我只是加了点自己的注释记个笔记 package basic class 01 import java util Arrays 对数器的作用 对数器可以验证算法是否正确 在比赛或者笔试的时候 如果需要大量的测试用例 而
  • 正则表达式的相关用法

    正则表达式 又称规则表达式 英语 Regular Expression 在代码中常简写为regex regexp或RE 计算机科学的一个概念 正则表通常被用来检索 替换那些符合某个模式 规则 的文本 大家在写正则表达式的过程中 可利用开源中
  • postgresql 数据库的备份与恢复(命令模式)

    Postgresql备份和恢复 SQL转储篇 Postgresql备份和恢复 SQL转储篇 作者 小P来自 LinuxSir Org摘要 和任何包含珍贵数据的东西一样 PostgreSQL 数据库也应该经常备份 备份PostgreSQL数据
  • git的命令操作,gitee的使用,详细图片教程

    目录 Git的区域概念图 Git的 Git Bash Here 命令操作 Gitee操作 SSH公钥注册流程 创建和操作版本库 Git的区域概念图 Git的 Git Bash Here 命令操作 1 创建一个普通文件夹 进入文件夹后 右键选
  • MultipartFile报No such file or directory

    原因 当使用MultipartFile做上传操作时 1 spring是先将上传文件存放在一个临时地址 默认 tmp目录下 2 进入controller进行业务操作 linux环境中 tmp目录是存放临时文件的 当这个目录下的子目录10天之内
  • canvas.drawBitmap(bitmap, src, dst, paint)

    GameView drawImage canvas mBitDestTop miDTX mBitQQ getHeight mBitDestTop getWidth mBitDestTop getHeight 2 0 0 public sta
  • DBeaver连接阿里云mysql步骤

    DBeaver连接阿里云mysql步骤 dbeaver是免费和开源 GPL 为开发人员和数据库管理员通用数据库工具 重点是免费并且很好用 本人因为navicat收费而经网友推荐发现这个软件 这个真是个宝藏软件 由于这个过程也是我慢慢摸索的
  • java项目与web项目中lib包

    lib包 一 java项目 1 过程 2 注意 二 web项目 1 过程 2 不自动加载问题解决方法 一 java项目 1 过程 1 在java项目下建一个lib的Folder 2 复制相关jar包到lib中 3 全选 点第一个jar包 按
  • 双层for循环时间复杂度_时间复杂度的表示、分析、计算方法……一文带你看懂时间复杂度

    作者 OverRedMaple 责编 Carol 来源 CSDN 博客 封图 CSDN付费下载于东方 IC 如果你还在发愁究竟怎么计算时间复杂度和空间复杂度 那你是来对地方了 名词解释 在计算机科学中 时间复杂性 又称时间复杂度 算法的时间
  • 路面监控服务器怎么维修,路面监控服务器怎么维修

    路面监控服务器怎么维修 内容精选 换一换 用户云服务器基本网络功能异常 无法完成基本通信 从弹性云服务器内部ping所在子网的网关 无法ping通 则需首先排查二三层网络问题 本问题请按照以下思路进行排查处理 检查弹性云服务器是否获取到IP
  • vue---------商城pc端 购物车模块

    目录 uuid some 与 every switch语句 HTTP的8种请求方式 Promise all的用法及其细节 uuid uuid生成随机id npm install uuid 下载 生成随机且唯一的游客身份 import v4