VUE2项目:尚品汇-axios二次封装请求以及VUEX的状态管理库

上一篇:VUE2项目:尚品汇VUE-CLI脚手架初始化项目以及路由组件分析(一)

目录

    • axios二次封装
    • API接口管理与解决跨域
      • API接口管理
      • nprogress进度条配置
    • VUEX状态管理库
    • 三级分类动态背景颜色
    • 防抖
    • 三级联动跳转路由分析

axios二次封装

项目需要使用到请求与响应的拦截器,分别在请求前与响应后做一些请求的响应处理,使用request.js文件对axios进行封装,前提是需要安装axios

安装:npm install --save axios

在这里插入图片描述
request.js全局封装

import axios from "axios";// 引入进度条
import nprogress from 'nprogress';
// 引入进度条样式
import "nprogress/nprogress.css"const requests = axios.create({//基础路径,发请求会带上api,每个路径的前缀baseURL: "/api",//对应vue.config文件里面的proxy代理//请求不能超过5Stimeout: 5000,
});//请求拦截器(可以在请求发出去之前,做一些事情)
requests.interceptors.request.use((config) => {//config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改//响应成功,进度条开始nprogress.start();return config;
});
//响应拦截器(在数据返回之后,做一些事情)
requests.interceptors.response.use((res) => {//响应成功,进度条结束nprogress.done();return res.data;},(err) => {//响应失败return Promise.reject(new Error("Fail"))}
);// 对外暴露
export default requests;

API接口管理与解决跨域

API接口管理

API接口统一在api文件夹下的index.js进行管理

在这里插入图片描述
例如,获取三级分类的数据接口:

import requests from "./request"// 获取商品三级分类数据
export const reqCategoryList = ()=>{return requests({url: "/product/getBaseCategoryList",method: "get"})
}

若仅仅发的是接口,还需要解决代理跨域问题,所谓的跨域问题就是前后端的访问地址的协议,域名,端口号有一个不一样就需要跨域,前端在vue全局配置文件vue.config.js进行配置:

module.exports = defineConfig({transpileDependencies: true,lintOnSave: false,// vue配置代理跨域devServer: {proxy: {'/api': {target: "http://gmall-h5-api.atguigu.cn",},}},
})

nprogress进度条配置

为了让用户更加直观的看到页面的加载情况,现引入nprogress插件。

效果如下:

在这里插入图片描述

安装:npm install --save nprogress

使用步骤很简单,引入进度条,引入样式,请求响应开始与结束时候调用方法即可。

在这里插入图片描述
可以调整进度条的颜色样式:

在这里插入图片描述

VUEX状态管理库

相当于一个仓库来集中管理组件中的数据,详细请参考vuex。

安装:npm install --save vuex

数据过多,可以使用vuex的模块化开发,将大仓库中放入各个模块下的数据。

在store文件夹下的index.js作为总的配置文件:

在这里插入图片描述
index.js:这里相当于一个大仓库,集成了其它小仓库中的数据,并对外暴露。

import Vue from "vue";import Vuex from "vuex";
// 使用插件
Vue.use(Vuex)import search from "./search";
import home from "./home";// 对外暴漏
export default new Vuex.Store({modules: {home,search}
})

随后导入仓库并注册:

在这里插入图片描述

下面的步骤就是将之前的商品的三级分类存储到vuex仓库中,具体步骤如下:

导入接口

导入之前在api下定义的请求三级分类的接口:

在这里插入图片描述
actions中异步发送请求的方法。

在这里插入图片描述
mutations中去修改state

在这里插入图片描述
最后存储至仓库之中:

在这里插入图片描述
在对应的页面进行使用,从仓库中取出对应的数据:

import { mapState } from 'vuex';

在这里插入图片描述
数据进行展示:

    <div class="type-nav" @mouseenter="enterShow" @mouseleave="enterShowLeave()"><div class="container"><h2 class="all">全部商品分类</h2><div @mouseleave="changeIndex(-1)"><transition name="sort"><div class="sort" v-show="show"><div class="all-sort-list2" @click="goSearch"><div class="item bo" v-for="(c1, index) in categoryList" :key="c1.categoryId":class="{ cur: currentIndex == index }"><h3 @mouseenter="changeIndex(index)"><a :data-categoryName="c1.categoryName" :data-category1Id="c1.categoryId">{{c1.categoryName}}</a><!-- 声明式的跳转会卡顿 --><!-- <router-link to="/search">{{ c1.categoryName }}</router-link> --></h3><div class="item-list clearfix"><div class="subitem" v-for="c2 in c1.categoryChild" :key="c2.categoryId"><dl class="fore"><dt><a :data-categoryName="c2.categoryName" :data-category2Id="c2.categoryId">{{c2.categoryName }}</a><!-- <router-link to="/search">{{ c2.categoryName }}</router-link> --></dt><dd><em v-for="c3 in c2.categoryChild" :key="c3.categoryId"><a :data-categoryName="c3.categoryName":data-category3Id="c3.categoryId">{{c3.categoryName }}</a><!-- <router-link to="/search">{{ c3.categoryName }}</router-link> --></em></dd></dl></div></div></div></div></div></transition></div><nav class="nav"><a href="###">服装城</a><a href="###">美妆馆</a><a href="###">尚品汇超市</a><a href="###">全球购</a><a href="###">闪购</a><a href="###">团购</a><a href="###">有趣</a><a href="###">秒杀</a></nav></div></div>

三级分类动态背景颜色

我们希望鼠标在分类上移动时会有背景颜色的显示:
在这里插入图片描述
有两种方案,直接在导航栏中改样式即可:

在这里插入图片描述

或者使用导航的索引进行JS的方式进行控制,先声明变量:

data() {return {// 鼠标位置,用来实现鼠标移入三级联动的样式currentIndex: -1,show: true}
},

鼠标监听索引的方法,这里需要使用节流的方式,不然鼠标滑动的时候会有卡顿的现象。

所谓节流就是,连续触发事件但是在 n 秒中只执行一次函数。

导入我们所需要的节流函数:

import throttle from 'lodash/throttle';

使用:

在这里插入图片描述

定义样式是否展示的方法:

enterShow() {this.show = true;
},

对导航栏的样式进行监听:

在这里插入图片描述

可以使用JS来控制二三级的分类与隐藏:

在这里插入图片描述

防抖

触发事件后,在 n 秒内函数只能执行一次,如果触发事件后在 n 秒内又触发了事件,则会重新再次触发事件并延长触发的时间。

有些事件比如mousemove ,mousehover 等,我们需要做限制保证它们不被频繁的被触发。

三级联动跳转路由分析

点击三级路由跳转到对应的搜索页面,需要将一二三级的分类名称与ID带入路径参数中:

在这里插入图片描述

使用编程式导航+事件委派机制的方式实现:

点击对应的分类将分类的名称与ID带入路径参数中:

在这里插入图片描述

添加方法:

goSearch(event) {// 编程式导航+事件委派// 事件委派就是将所有的子节点的事件全部委托给父亲节点,点击a标签才会跳转// 事件委派会将所有的子节点交给父节点.data-categoryName区别为a标签// 获取到当前鼠标点击的标签let element = event.target;let { categoryname, category1id, category2id, category3id } = element.dataset;// 如果有categoryname则一定是a标签if (categoryname) {// 跳转路由的参数let location = { name: 'search' };let query = { categoryName: categoryname };// 区分一级,二级。三级a标签if (category1id) {query.category1Id = category1id;} else if (category2id) {query.category2Id = category2id;} else {query.category3Id = category3id;}// 判断,如果路由跳转,带有params参数,传递过去if (this.$route.params) {location.params = this.$route.params;location.query = query;this.$router.push(location);}}
},

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

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

相关文章

windows系统查看exe程序的依赖dll并拷贝到指定路径下

脚本 echo off REM windows_copy_depends.bat是脚本文件名&#xff0c;exe_path是exe文件的全路径&#xff0c;dll_folder_path是脚本当前路径下的文件夹名称 REM 如windows_copy_depends.bat E:\git_code\windows_docker_desktop\winget.exe 123 echo Usage: windows_copy_dep…

Kafka收发消息核心参数详解

文章目录 1、从基础的客户端说起1.1、消息发送者主流程1.2、消息消费者主流程 2、从客户端属性来梳理客户端工作机制2.1、消费者分组消费机制 1、从基础的客户端说起 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId…

《大师级引导-应对困境的工具与技术》读书笔记1

《大师级引导-应对困境的工具与技术》这个书&#xff0c;十分不错&#xff0c;教练和非教练都可以学习。下面是其中的关于冲突的处理&#xff1a; 定义&#xff1a;双方以解决冲突、说明关系为目的而进行的积极的、具有建设性的对话。 目的&#xff1a;制定双方协议&#xf…

《CTFshow-Web入门》10. Web 91~110

Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索…

锚框_的标定

一、查漏补缺、熟能生巧&#xff1a; 1.关于fix.axis.add_patch在原来图像的坐标系同添加 边框的函数的使用&#xff1a; 2.torch.arange( h , device)生成tensor的等差数组: 3.torch.T&#xff08;&#xff09;就是transpose转置操作的函数咯: 4.torch.repeat操作&#xff0c…

【Axure高保真原型】3D圆柱图_中继器版

今天和大家分享3D圆柱图_中继器版的原型模板&#xff0c;图表在中继器表格里填写具体的数据&#xff0c;调整坐标系后&#xff0c;就可以根据表格数据自动生成对应高度的圆柱图&#xff0c;鼠标移入时&#xff0c;可以查看对应圆柱体的数据……具体效果可以打开下方原型地址体验…

Springboot+vue的在线试题题库管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的在线试题题库管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的在线试题题库管理系统&#xff0c;采用M&…

javaSwing销售管理

​ 目录 一、选题背景 近几年来&#xff0c;传统商业与电商似乎是水火不容&#xff0c;大有不是你死便是我活的劲头。一直以来舆论都是一边倒的电商将迅速取代传统零售的论调&#xff0c;然而几年过去&#xff0c;电商的发展确实值得侧目&#xff0c;但传统商业虽然受到不小的…

性能压力测试的定义及步骤是什么

在今天的数字化时代&#xff0c;软件系统的性能和稳定性对于企业的成功至关重要。为了确保软件在高负载和压力情况下的正常运行&#xff0c;性能压力测试成为了不可或缺的环节。本文将介绍性能压力测试的定义、步骤。 一、性能压力测试的定义和目标 性能压力测试是通过模拟实际…

网络工程师学习中但是发现这个岗位非常卷怎么办

大家好&#xff0c;我是网络工程师成长日记实验室的郑老师&#xff0c;您现在正在查看的是网络工程师成长日记专栏&#xff0c;记录网络工程师日常生活的点点滴滴 有个同学说&#xff0c;他说现在有很多培训机构搞的这个网络工程师也非常卷。他现在还没有入行&#xff0c;他现在…

指定vscode黏贴图片路径(VSCode 1.79 更新)

指定vscode黏贴图片路径(VSCode 1.79 更新) 设置中搜索"markdown.copyFiles.destination" 点击AddItem,配置你的key-value&#xff0c;完成。

快排三种递归及其优化,非递归和三路划分

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 快排简介&#xff1a; 快排的三种递归实现&#xff1a; Hoare&#xff1a; 挖坑&#xff1a; 双指针&#xff1a; 小区间优化&#xff1a; 三数取中优化&#xff1a; 快排非递归实现&#xff1a; 快排的三路划…

基于PSO算法的功率角摆动曲线优化研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【设计模式】五、原型模式

文章目录 概述示例传统的方式的优缺点原型模式原理结构图-uml 类图 原型模式解决克隆羊问题的应用实例Sheep类实现clone()运行原型模式在 Spring 框架中源码分析 深入讨论-浅拷贝和深拷贝浅拷贝的介绍 小结 概述 示例 克隆羊问题 现在有一只羊 tom&#xff0c;姓名为: tom, 年…

V4L2 驱动架构介绍

V4L2 简介 Video for Linux two(Video4Linux2)简称 V4L2&#xff0c;是 V4L 的改进版。V4L2 是 linux操作系统下用于视频和音频数据采集设备的驱动框架&#xff0c;为驱动和应用程序提供了一套统一的接口规范。 在 Linux 下&#xff0c;所有外设都被看成一种特殊的文件&#xf…

freertos简介与移植

freertos是一个可裁剪的小型rtos系统&#xff0c;特点&#xff1a; 支持抢占式&#xff0c;合作式和时间片调度saferos衍生自freertos&#xff0c;更完整提供了一个用于低功耗的tickless模式系统的组件在创建时可以选择动态或者静态的ram&#xff0c;例如任务&#xff0c;消息…

MARS: An Instance-aware, Modular and Realistic Simulator for Autonomous Driving

● MARS: An Instance-aware, Modular and Realistic Simulator for Autonomous Driving&#xff08;基于神经辐射场的自动驾驶仿真器&#xff09; ● https://github.com/OPEN-AIR-SUN/mars ● https://arxiv.org/pdf/2307.15058.pdf ● https://mp.weixin.qq.com/s/6Ion_DZGJ…

【新版】系统架构设计师 - 层次式架构设计理论与实践

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…

代码随想录算法训练营第五十一天 |309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结

一、309.最佳买卖股票时机含冷冻期 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划来决定最佳时机&#xff0c;这次有冷冻期&#xff01;| LeetCode&#xff1a;309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili 思考&#xff1a; 1.确定dp数组&…

MySQL SQL性能分析(SQL优化 一)

在开发和维护数据库应用程序时&#xff0c;优化SQL查询的性能是至关重要的。MySQL提供了一些强大的工具和技术&#xff0c;帮助我们进行SQL性能分析&#xff0c;找出潜在的瓶颈并进行相应的优化。 查看SQL的执行频率 show [ session| global ] status 命令查看服务器状态信息…