前端项目-03-三级联动和路由跳转和传参

news/2024/7/10 2:29:58 标签: vue, 前端

目录

1-二三级联动的显示和隐藏(JS控制)

2-卡顿现象

3-三级联动路由跳转


1-二三级联动的显示和隐藏(JS控制)

目前系统的二三级分类是通过样式来实现的。原始代码:

 

 

我们现在需要通过JS来控制显示和隐藏:给div添加一个动态样式;
<div class="item-list clearfix" :style="{display:currentIdx==index?'block':'none'}">
 

 

2-卡顿现象

       如果用户操作过快,每一次的操作都会调用函数(函数内部可能有计算等等其他逻辑)会导致浏览器解析不过来,出现所谓的卡顿现象...
所以在项目中药进行节流和防抖处理....

防抖:前面所有的触发都被取消,最后一次执行在规定的时间之后触发,只会执行一次....

节流:在规定的时间间隔范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,把频繁触发变更为少量触发....

已经有封装好的组件

Lodash 简介 | Lodash 中文文档 | Lodash 中文网
 

 

 

用户滑动三级分类过快,这里添加了lodash节流函数throttle函数

 

 

ps:throttle的回调函数这里不能使用箭头函数,可能会出现上下文this问题

3-三级联动路由跳转
 

用户点击一级,二级,三级分类,会从home跳转到search模块,会把对应的分类id和分类名称传递过去...

 

点击一级分类,传递一级分类id和一级分类名称;
点击二级分类,传递二级分类id和二级分类名称;
点击二级分类,传递三级分类id和三级分类名称;

声明式导航使用router-link ,由于router-link是一个组件,当鼠标移动过快的时候,因为是组件而且是循环(组件需要创建实例等等,很耗时间和内存的),所以出现了卡顿现象...因此我们这里采用编程式导航...

最好的解决方式:编程式导航+事件委派

利用事件委派存在以下问题:

问题1-事件委派:是把全部子节点【比如h3,dt,dl,dm】的事件委派给父节点,我们的需求的点击a标签才跳转,如何确定点击的是a标签呢?
问题1的解决方式,利用自定义属性,给a标签自定义属性,其他标签肯定没有这个属性;比如定义data-categoryName

问题2-即使您能确定是a标签,如何确定和区分是一级分类,二级分类,三级分类的a标签呢?
问题2的解决方式,再给a标签自定义一个属性data-category1Id;

注意:自定义属性后通过event.target.dataset可以拿到自定义属性和属性值,但是我们定义data-categoryName是这样,拿到的值是categoryname(浏览器自动帮我们转小写了)

 

 

 


http://www.niftyadmin.cn/n/183202.html

相关文章

Selenium+Pytest自动化测试框架实战

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象&#xff0c;封装继承 一定的selenium基础——本篇不讲selenium 测试框架简介 测试框架有什么优点呢&#xff1a; 代码复用率高&#xff0c;如果不使用框架的话&#xff0c;代码会很冗余…

25《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限&#xff0c;如果错误欢迎批评指正。 第六章&#xff1a;The principles of protein folding kinetics &#xff08;蛋白质折叠动力学的原理&#xff09; 通过过渡态的概念来描述了单指…

19、Django开发总结:自带的常用装饰器应用场景及正确使用方法总结

装饰器(decorator)可以在不改变一个函数代码和调用方式的情况下给函数添加新的功能。装饰器广泛用于权限校验和缓存等场景。Django项目中使用装饰器可以让代码将变得更干净、更可读、更可维护。 使用装饰器可以很方便地修改对象行为&#xff0c;通过使用类似接口将修改动作封装…

docker安装rabbitmq+延迟插件

目录 1.安装RabbitMQ 1.安装docker 2.启动容器 3.访问管理端 2.安装延迟插件 1.插件下载地址 2.上传到消息容器内部 3.重启容器 3.spring配置 4.springboot配置 1.安装RabbitMQ 1.安装docker https://blog.csdn.net/adminBfl/article/details/1104423032.启动容器 …

C++ 重复尾部字符串删除函数

#include "iostream" #include "string" using namespace std; void delRepeat(string &head,string &tail) {for (int j 1; j < tail.size(); j) {if(head.substr(head.size()-j).compare(tail.substr(0,j))0){ // 删除重复的部分…

Spring Cloud Alibaba全家桶——微服务网关Gateway组件

前言 本文小新为大家带来 微服务网关Gateway组件 相关知识&#xff0c;具体内容包括微服务网关Gateway组件&#xff08;包括&#xff1a;Gateway核心概念&#xff0c;Gateway工作原理&#xff09;&#xff0c;Spring Cloud Gateway环境搭建&#xff0c;路由断言工厂&#xff08…

20道经典Redis面试题

20道经典Redis面试题 前言 整理了20道经典Redis面试题&#xff0c;希望对大家有帮助。 1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用A…

[MySQL]同一張資料表的日期欄位相減_派生表(dervied table)的應用

以往對於MySQL數據庫的應用&#xff0c;大多是基本的增刪改查步驟&#xff0c;因此MySQL大多停留在基本語法階段。然而在實際的數據應用上&#xff0c;若能從數據庫直接運算和抽取運算結果&#xff0c;同時不需要在MySQL中額外建立一個實體表&#xff0c;再好不過。 在MySQL中…