尚品汇项目难点及解决

article/2025/10/29 5:14:16

v-router重写push、replace方法

问题描述:当页面再次进入同一个路由地址时,控制台报错
在这里插入图片描述
解决方法:修改vue-router的配置文件,也就是router/index.js文件

//重写VueRouter.prototype身上的push方法了
VueRouter.prototype.push = function(location, resolve, reject) {//第一个形参:路由跳转的配置对象(query|params)//第二个参数:undefined|箭头函数(成功的回调)//第三个参数:undefined|箭头函数(失败的回调)if (resolve && reject) {//push方法传递第二个参数|第三个参数(箭头函数)//originPush:利用call修改上下文,变为(路由组件.$router)这个对象,第二参数:配置对象、第三、第四个参数:成功和失败回调函数originPush.call(this, location, resolve, reject);} else {//push方法没有产地第二个参数|第三个参数originPush.call(this,location,() => {},() => {});}
};
//重写VueRouter.prototype身上的replace方法了
VueRouter.prototype.replace = function(location, resolve, reject) {if (resolve && reject) {originReplace.call(this, location, resolve, reject);} else {originReplace.call(this,location,() => {},() => {});}
};

三级联动路由跳转的优化

三级联动路由如下图所示:
在这里插入图片描述
点击’电子书‘后跳转的页面如下:
在这里插入图片描述
问题分析:
1、由于三级分类都是<a>标签,所以要实现路由跳转,最简单的方式就是将a标签换成
<router-link to="/search">,但是由于服务器的数据返回,循环语句的执行,可能在一瞬间,要加载几千个router-link,router-link是组件,组件需要创建,所以很耗费内存,最终会出现卡顿现象。
2、所以采用编程式导航来实现,编程式导航需要绑定事件,如果将事件绑定在每个<a>标签上,虽然不会出现卡顿现象了,但是当数据返回时,每次循环会就会导致有几千个回调函数,所以可以利用事件委派解决这个问题。
3、最好的解决方案是编程式导航结合事件委派。但是利用事件委派存在两个问题需要解决:

    3.1、全部的子节点的事件都委派给了父节点,但是我们需要的是点击一定是a标签,如何区别a标签和其它标签?在a标签上定义自定义事件data-categoryName,后面用dataset就能获取自定义属性及属性值;3.2如何获取参数【1、2、3级分类的产品的名字、id】?在1,2,3级分类上定义自定义属性data-category1Id、data-category2Id、data-category3Id,就能区分了

三级联动TypeNav的代码如下:
template内

 <!-- 将点击事件goSearch放在父元素上 --><div class="all-sort-list2" @click="goSearch"><div class="item" v-for="(c1,index) in categoryList" :key = "c1.categoryId"><h3><!-- 为了区别a标签和其它标签,在a标签上定义自定义事件data-categoryName,后面用dataset就能获取;1,2,3级区分同理 --><a :data-categoryName="c1.categoryName" :data-category1Id="c1.categoryId" >{{c1.categoryName}}</a></h3><div class="item-list clearfix"><div class="subitem" v-for="(c2,index) 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,index) in c2.categoryChild" :key="c3.categoryId"><a :data-categoryName="c3.categoryName" :data-category2Id="c3.categoryId" >{{c3.categoryName}}</a></em></dd></dl></div></div></div></div>

script内

 methods:{goSearch(event){//利用编程式导航和事件委派//事件委派会出现一些问题:1.全部的子节点的事件都委派给了父节点,但是我们需要的是点击一定是a标签let element = event.target;//dataset可以获取自定义属性与属性值(解构赋值)let {categoryname,category1id,category2id,category3id} = element.dataset;console.log(element.dataset)//   如果标签身上有categoryname那一定是a标签if(categoryname){//   alert(123);//整理路由跳转的参数let location = {name:"search"};let query = { categoryName:categoryname }// 2.如何获取参数【1、2、3级分类的产品的名字、id】if(category1id){query.category1Id = category1id}else if(category2id){query.category2Id = category2id}else{query.category3Id = category3id}location.query = query;this.$router.push(location);//   alert(123)}},

跨域问题

/api/request.js
1、对axios进行二次封装

//对axios进行二次封装
import axios from "axios";
//引入进度条
import nprogress from "nprogress";
//引入进度条的样式
import "nprogress/nprogress.css"
console.log(nprogress);
//利用axios对象的方法create,创建一个axios实例
const requests = axios.create({baseURL:"/api",//请求超时时间为5stimeout:5000,
});//请求拦截器:再发请求之前,请求拦截器可以监测到,可以在请求发出之前走一些事情
requests.interceptors.request.use((config)=>{//config:配置对象,对象里面有个属性很重要,headers请求头//进度条开始动nprogress.start();return config;
})
//响应拦截器
requests.interceptors.response.use((res)=>{//成功的回调函数:服务器响应数据回来以后,响应拦截器可以检测到,做一些事情//进度条结束nprogress.done();return res.data;     
},(error)=>{//响应失败的回调函数return Promise.reject(new Error('faile'));
})//对外暴露
export default requests;

2、对接口进行统一管理
/api/index.js

//当前这个模块:对API进行统一管理
import requests from "./request";//三级联动接口
// /api/product/getBaseCategoryList    get   无参数
export const reqCategoryList = ()=>{//发请求  axios发请求,返回结果是promise对象//会出现跨域问题:协议、域名、端口号不同就会出现跨域问题//http://39.98.123.211//http://localhost:8080//解决方法:JSONP、CROS、代理(在config.js配置文件修改)return requests({url:'/product/getBaseCategoryList',method:"get"})
}

解决跨域问题方法一:代理跨域
在服务器和浏览器中间设置一个代理服务器,解决跨域问题
vue.config.js

module.exports = {//关闭eslint校验工具lintOnSave:false,//代理跨域devServer:{proxy: {"/api": {target: "http://39.98.123.211",//路径不需要重写,因为所有的接口都有/api//   pathRewrite: {"^/api" : ""}},},},} 

轮播图解决浏览器异步数据及swiper问题

问题分析:
swiper插件完成轮播图需要两件事:首先将DOM结构渲染完成,然后再创建一个swiper实例。
但是我们从浏览器获取数据是异步的(获取数据也在mounted中),所以不能保证创建swiper实例时(在mounted生命周期函数内创建这个实例)就将DOM结构完成了,要解决这个问题,有以下三种方法:

  • 1、update
    当有其他数据时,其它数据进行更新,但轮播图的数据不更新时,都会再创建一次swiper实例然后再创建轮播图,所以这个方法不是特别好。

  • 2、延时器
    延时1秒,轮播图的功能才可以实现,此方法可行但也不是很完美。

  • 3、watch+nextTick
    如果只有watch,只能保证bannerList数据已经存入到仓库里了,但是不能确定v-for执行完毕,v-for执行完了才能保证DOM结构完成,所以需要结合nextTick来完成。
    nextTick


http://chatgpt.dhexx.cn/article/3feJwtJJ.shtml

相关文章

技术·融合·治理|众享链网2021发布会暨试运行启动仪式成功举办

2021年6月&#xff0c;工业和信息化部、中央网信办共同发布《关于加快推动区块链技术应用和产业发展的指导意见》&#xff0c;建设多方协同共赢的先进产业链&#xff0c;打造多技术融合的区块链生态体系已成为新的发展方向。如何能让所有人都有机会参与这场区块链的产业变革&am…

尚品汇前端项目难点

尚品汇前端项目 1.如何运行后浏览器自动打开 ​ 解决方法&#xff1a;找到package.json 找到 script serve 后面加 –open 2.打开后发现第一次打开网页显示http://0.0.0.0:8080/ 的网页可能暂时无法连接&#xff0c;或者它已永久性地移动到了新网址。 解决方法&#xff1a;…

九龙证券|券商春季策略扎堆来袭 风格切换成焦点

2月以来&#xff0c;国泰君安、中信建投、国金证券等10余家券商组织相继发布2023年春季战略。综合来看&#xff0c;组织对A股持达观预期&#xff0c;未来两三个月A股商场或迎来重要切换。风格上&#xff0c;“中心财物&#xff0c;生长接力”或许成为上半年装备主线&#xff0c…

分击合进,锦江之星酒店与白玉兰酒店再领投资热潮

2022年11月11日&#xff0c;「山水画中游&#xff0c;暇享好时光」品牌品鉴会在广西桂林隆重召开。锦江酒店&#xff08;中国区&#xff09;旗下两大酒店品牌锦江之星酒店和白玉兰酒店携手亮相本次活动。 &#xff08;品牌矩阵品鉴会活动现场&#xff09; 后疫情时代&#xff…

盛世昊通打造好品艺拍线上交易平台,助力推广中国艺术文化

艺术品交易市场这两年的发展可谓是空前热烈&#xff0c;诸多艺术品皆迎来变现需求。新时代背景下&#xff0c;有数字技术的加持&#xff0c;数字文化资产作为数字经济发展的重要组成部分&#xff0c;成就了文化交易市场蓝海。 为响应国务院“全面复兴传统文化”&#xff0c;“提…

上海亚商投顾:沪指高开低走涨0.45% 大消费王者归来

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日高开低走&#xff0c;深成指、创业板指较为强势&#xff0c;盘中均涨超2%&#xff0c;午后涨幅有所收窄。…

《扬帆优配》互联互通扩容提升港股市场活力

作为国际最敞开的自由港和重要的国际金融中心之一&#xff0c;香港衔接内地与国际的优势不断稳固。自2022年以来&#xff0c;互联互通机制屡获打破性进展&#xff0c;港交所发挥“超级联系人”的效果不断提高。 今年3月&#xff0c;跟着港股通进一步扩容&#xff0c;一批成长型…

活动回顾丨研发效能度量线下沙龙圆满举办

2月18日&#xff0c;由跬智信息&#xff08;Kyligence&#xff09;联合甄知科技主办的研发效能度量线下沙龙圆满举办。本次沙龙在 Kyligence 上海总部举办&#xff0c;Kyligence 联合创始人兼 CTO 李扬、腾讯 Tech Lead 茹炳晟&#xff0c;以及甄知科技创始人兼 CTO 张礼军在现…

2023COSP深圳户外展行业高峰论坛即将召开!博洋优选也将参加

2023COSP深圳户外展将在3月17日—19日&#xff0c;于深圳福田会展中心举办&#xff0c;此次展会邀请到知名品牌企业领头人、商协会负责人、圈内大咖&#xff1b;由市场趋势的洞察入手&#xff0c;多维度、多角度进行深度分享&#xff0c;引导行业从业者&#xff0c;以更宏观、更…

精彩回顾 | 客户体验官俱乐部(CEOC)首届主题论坛在深圳圆满落幕

2021年10月29日&#xff0c;客户体验官俱乐部&#xff08;Customer Experience Officer Club&#xff0c;CEOC&#xff09;首届主题论坛在深圳益田威斯汀酒店圆满落幕。本次论坛由客户体验官俱乐部主办&#xff0c;瀚一数据科技&#xff08;深圳&#xff09;有限公司和才博&…

尚好房 04_服务拆分

尚好房&#xff1a;服务拆分 一、业务介绍 1、项目模块划分 根据前面的介绍&#xff0c;目前我们的系统规划了3个dubbo服务提供者模块&#xff1a;权限服务、房源服务与会员服务&#xff0c;及2个服务消费者模块&#xff1a;尚好房管理平台&#xff08;web-admin&#xff09…

纯正体验,极致商务 | 丽亭酒店聚焦未来赛道,实现共赢发展

10月28日&#xff0c;锦江酒店(中国区)“齐鲁集锦 共话未来”投资人交流会在济南盛大召开&#xff0c;面向华东地区投资人&#xff0c;行业专家、商旅客、品牌代表齐聚一堂&#xff0c;共同聚焦酒店市场投资新价值&#xff0c;商讨新时代酒店行业新机遇&#xff0c;多维探索酒店…

2023尚上优选-社区团购 优选电商Spring Cloud Alibaba

尚上优选2023最新企业级微服务架构项目 分布式微服务后端VUE、小程序 尚上优选是真实居住社区内居民团体的一种互联网线上线下购物消费行为&#xff0c;是依托真实社区的一种区域化、小众化、本地化、网络化的团购形式。简而言之&#xff0c;它是依托社区和团长社交关系实现生…

尚品汇项目搭建

文章目录 一些问题大体流程一、基础配置路由7&#xff09;路由的跳转8&#xff09;路由传参9)重写replace|和push方法10&#xff09;router和route axios引入进度条vuex三级联动防抖节流 Home组件轮播图mock共用组件Carousel 二.search页面内查看接口格式发送请求获取数据面包屑…

BBS论坛

BBS论坛的搭建 第一步:下载 Discuz_X3.2_SC_UTF8.zip 压缩包到/var/www/westos.com/bbs/html下。 mkdir /var/www/westos.com/bbs/html -p 第二步&#xff1a;解压的到 readme upload utility 三个文件夹&#xff0c;删除压缩包 第三步&#xff1a;编辑/etc/httpd/conf.d中的…

尚好房 07_前端房源展示

尚好房&#xff1a;前端房源展示 一、分页显示房源列表 1、效果 2、项目搭建 2.1 创建项目 在web项目中创建子工程web-front 2.2 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&…

高地创新“至臻和鸣”体系甄选客户答谢会暨公益论坛隆重举行

2022年1月5日,高地创新服务产业集团“至臻和鸣”体系甄选客户答谢会暨物业服务智造幸福生活公益论坛于上海豫园“海上梨园”召开。复星蜂巢合伙人、高地城市服务产业集团董事长冉飞,复星蜂巢副总裁、高地城市服务产业集团执行总裁陈煜宇,复星副首席赋能官、公共事务与企业传…

关于万物悦享推广案例

关于万物悦享推广案例 项目介绍 万物悦享是一家改变传统消费模式的公司&#xff0c;致力于让消费者在衣食住行都能把消费变成开心享受的事情。该公司通过消费增值、绿色积分、12倍通证强制出局、卷轴和撸实现这一目标。在通证经济下&#xff0c;消费者可以通过获得通证再赚回…

盛悦论坛打不开,盛悦论坛挂了,盛悦论坛被黑,请使用这个地址访问即可访问

原文说明&#xff1a;http://www.58zn.cn/html/blogview-1245.html 如果盛悦网站打不开无法访问&#xff0c;请到这里打开盛悦镜像论坛。bbs.58zn.cn这个是盛悦论坛的网站备份镜像&#xff0c;盛悦所有数据保留在这里。 我经常是1个星期做一次数据备份与同步数据。所以&#xf…

Aborted(core dumped)

在用caffe训练的时候发现Aborted(core dumped)错误&#xff0c;搜索后发现可能原因是train_val.prototxt中train部分的batch_size设置过大导致。将batch_size修改调小后即可正常训练。 检查日志后发现确实是内存不够&#xff1a;