前端:利用生成器和迭代器实现分离逻辑


title: 前端:利用生成器和迭代器实现分离逻辑
date: 2024-03-05 23:31:12
categories: 前端
tags:

  • 前端
  • JavaScript

工作半年了常没时间、没动力学习新东西,每天就在忙着写业务逻辑,非常的枯燥。即使考虑到可以用新东西来实现某个需求,但为了保证业务的快速迭代,只能选择更稳妥的方式。

生成器和迭代器

今天完善一个需求,统一检索中,检索的各个实体tab依次弹出,实现类似RXJS弹珠图的效果。

class TabIterabor {constructor(private models: string[],private query: string,private index = 0) {}// asyncIterator 标识是一个异步迭代器,next函数返回一个Promise对象[Symbol.asyncIterator]() {return {next: async ()=> {return { value: null, done: true }}        }}// 可以使用生成器来构造自定义迭代器// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator/Iterator// *[Symbol.iterator]() {//   for (let value = this.#start; value <= this.#end; value += this.#step) {//     yield value;//   }// }
}

权限和菜单交互的设计

  • 隐藏菜单

    • 控制子菜单提升效果
    • 空权限时不允许登录
  • 不隐藏菜单,将指定的路由页面设置成404或者403页面

退出登录时应该要清空store和router的信息

封装hooks,增强router功能

import { Router, RouteRecordRaw } from "vue-router";export const useExtRouter = (router: Router) => {/*** @function 退出登陆后,需要清空路由* @param {Router} router* @param {string[]} excludes name | path* @description* 在登录情况下,用户一定存在404路由用来显示不存在的或被过滤的路由页面,同时由于404路由应该放在异步路由后面* 所以在重置router时,需要清除404路由以避免后续添加异步路由时添加到404路由后面*/const resetRouter = (excludes: string[]) => {const routes = router.getRoutes();routes.forEach((item) => {if (!excludes.find((x) => x === item.path || x === item.name)) {router.removeRoute(item.name as string);}});};/*** 删除嵌套路由* @param route*/const deepDelete = (route: RouteRecordRaw) => {route.children?.forEach((item) => deepDelete(item));router.removeRoute(route.name as string);};/*** 添加嵌套路由* @param routes*/const addRoutes = (routes: RouteRecordRaw[]) => {routes.forEach((item) => {deepDelete(item); // 避免重复添加路由router.addRoute(item);});};return {resetRouter,deepDelete,addRoutes,};
};export default useExtRouter;

路由别名

在权限菜单的控制中,会存在前后登录的用户权限不一样导致可见的菜单不一样的问题。怎么动态的控制用户跳转的主页呢?

因为在404页面和登录成功后跳转都是 /,那就想到让 /跳转到 /home,在清洗权限路由(菜单)时,给找到的第一个有权限的路由标识路由别名,至此所有跳转到主页面 / 的都会跳转到 /home,而 /home 属于动态设置的路由别名,就可以动态的控制主页面了。

统一检索多个状态

tabs加载中,不允许输入新的query,也不允许发起新的query

tabs加载完成,第一个count非0的tab内容列表加载中,此时请求新query,加载新的tabs,此时上一次tabs中第一个count非0的tab请求完成,而当前tabs的第一个非0tab还没有发出请求(requestCount没有变化),所以会导致列表内容变化,展示不合理。

这个现象的主要问题在新tabs的第一个count非0的tab还没有发出请求,导致requestCount没有变化,所以达不到丢弃旧数据的效果。

解决方案:

不能简单的判断extTabLoading处于loading就丢弃数据,因为存在第一个Tab发出的请求快于extTabs的请求。

通过判断extTabs的请求次数来决定是否赋值。

因为此时count非0的tab已经发出请求,此时再发新extTabs的请求,然后再发count非0的tab请求,count非0的tab请求可能快于extTabs,所以不能简单将extLoading时的列表内容丢弃,可能丢弃的就是需要请求的内容。并且在新的tab发出请求后,旧tab发出的请求一定会被丢弃(requestCount)。

最终明确需要解决的问题时不同的extTabs请求,决定是否赋值数据。

GitHub

  • rtpacks · 前端:利用生成器和迭代器实现分离逻辑

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

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

相关文章

使用EasyYapi插件简化导出yapi接口

安装 &#xff1a; 关键配置&#xff1a; 其中的token在这里拿&#xff1a; 使用&#xff1a; 导出当前Controller下的所有api&#xff1a;使用下图命令可仅导出指定的api: 附&#xff1a;配置部分参考了idea&#xff1a;使用easyYapi插件导出yapi接口

在树莓派4B上安装Ubuntu Server 20

在树莓派4B上安装Ubuntu Server 20 树莓派是一个广受欢迎的小型单板计算机&#xff0c;它可以用于各种项目&#xff0c;从家庭自动化到网络服务器。Ubuntu Server 20是一个轻量级、高效的操作系统&#xff0c;非常适合在树莓派上运行。本文将指导你如何在树莓派上安装Ubuntu S…

Docker Stack(堆栈) 部署多服务集群,多服务编排

1、Docker Stack简介 Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建 介绍的 Docker Swarm 只能实现对单个服务的简单部署&#xff0c;于是就引出了Docker Stack。 上面我们介绍到 docker-compose&#xff1a;可以在一台机器上使用…

Vue中如何实现动态改变字体大小

在Vue应用程序中&#xff0c;动态改变字体大小是一个常见的需求。这可以通过使用Vue的数据绑定功能和计算属性来实现。在本文中&#xff0c;我们将介绍如何在Vue中实现动态改变字体大小&#xff0c;并提供示例代码以帮助您更好地理解。 开始 在动态改变字体大小之前&#xff0…

在阿里云服务器添加ssh,方便远程登录

前言&#xff1a; 添加ssh密钥步骤&#xff1a; chmod 700 .ssh #创建ssh cd .ssh chmod 700 authorized_keys #添加权限密钥 vim authorized_keys #编辑密钥 添加本地电脑ssh密钥 vim /etc/ssh/sshd_config #更改ssh配置文件 配置文件 # no default banner path #Banner no…

每天一个数据分析题(二百三十二)

在Transformer架构中&#xff0c;以下哪个组件负责捕获输入序列中的位置信息&#xff1f; A. Multi-head Attention B. Feed-forward Neural Network C. Positional Encoding D. Layer Normalization 题目来源于CDA模拟题库 点击此处获取答案

【分享】CMMI V3.0版本做了哪些改变?哪些企业适合申请CMMI3.0

​ CMM是由美国卡内基梅隆大学软件工程研究所1987年开发成功的&#xff0c;它基于过去所有软件工程过程改进的成果&#xff0c;吸取了以往软件工程的经验教训&#xff0c;提供了一个基于过程改进的框架&#xff1b;CMMI(Capability Maturity Model Integration能力成熟度模型集…

网络安全-文件包含

一、php://input 我们先来看一个简单的代码 <meta charset"utf8"> <?php error_reporting(0); $file $_GET["file"]; if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://&quo…

压力测试面试题及答案!

压力测试是软件测试中的一种测试方式&#xff0c;用于评估软件系统在各种压力条件下的性能表现。以下是常见的压力测试面试题及答案&#xff1a; 什么是压力测试&#xff1f; 压力测试是一种测试方式&#xff0c;用于模拟实际用户在正常和峰值负载条件下对软件系统施加的压力&…

Shell脚本入门

1.shell脚本的创建和执行 创建一个文件 写一个shell脚本 上面这种方法不常用&#xff0c;常用下面 所有可执行文件是绿色 绝对路径 相对路径 在该文件下运行.sh文件 souce 要在该文件的文件夹下执行 . hello.sh和./hello.sh是完全不同的&#xff0c;点空格是点命令 2.变量 …

IT部门都想要的跨网文件交换解决方案,了解一下

近年来全球网络安全威胁态势的加速严峻&#xff0c;使得企业对于网络安全有了前所未有的关注高度&#xff0c;企业的网络安全体系建设正从“以合规为导向”转变到“以风险为导向”&#xff0c;从原来的“保护安全边界”转换到“保护核心数据资产”的思路上来。 为了保护企业的核…

EPSON的实时时钟模块RX8010SJ丰富的定时功能及超低功耗特性

温控器是用于控制温度的设备&#xff0c;目前市面上的温控器用于控制地暖空调、热水器、中央新风系统等设备。随着智能家居理念深入人心&#xff0c;人们也期望温控器不仅能控得"准”&#xff0c;还能控得“智能”。为了实现智能控制&#xff0c;温控器一般需要实时时钟模…

MATLAB2:符号对象的创建及符号计算

文章目录 一、实验目的二、实验内容三、仿真结果四、实践中遇到的问题及解决方法 一、实验目的 1.理解符号对象和数值对象之间的差别&#xff0c;以及它们之间的互相转换。   2.了解符号运算和数值运算的特点、区别和优缺点。   3.掌握符号对象的基本操作和运算&#xff0c…

【随笔】Git -- 基本概念和使用方式(五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

GIS、CAD数据为基础进行城市排水系统水力建模方法

佳文推荐 城市内涝水文水动力模型介绍 在城市排水防涝规划过程中&#xff0c;水文水动力耦合模型已经成为一种不可或缺的分析工具。在模型建立、城市内涝风险评估、排水系统性能诊断以及海绵城市规划等方面&#xff0c;内涝耦合模型提供了相应的模拟及分析工具&#xff1a; …

【Rust】——提取函数消除重复代码和泛型

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

ISBN信息查询api接口

基本说明&#xff1a; 接口地址&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn{isbn}&appKey{appkey}返回格式&#xff1a;json请求方式&#xff1a;get请求示例&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn9787513159074&appKey…

前端请求的有几种方法

vue前端请求api的有几种方法 使用 XMLHttpRequest (原生方式)&#xff1a;使用 Fetch API&#xff1a;使用 Axios&#xff1a;使用 Vue Resource&#xff1a;使用其他第三方库&#xff1a;Vue 自身配合生命周期钩子&#xff1a; unfetch插件和 fetch有什么区别&#xff1f;vue2…

C语言:编译与链接

目录 前言1. 翻译环境与运行环境2.翻译环境&#xff1a;预编译编译汇编链接3. 运行环境 前言 我们写一个程序&#xff0c;例如test.c或是test.h这些源文件&#xff0c;头文件&#xff0c;事实上这些代码都是文本文件&#xff0c;但是计算机能够看得懂&#xff0c;并且直接执行…

【概率基础】生成式模型与判别式模型最大的区别是什么?两者可以互相转化吗?

1. 生成式模型与判别式模型最大的区别 生成式模型与判别式模型最大的区别在于它们对数据的建模方式和目标。 建模方式&#xff1a; 生成式模型&#xff08;Generative models&#xff09;尝试学习输入数据和输出标签的联合概率分布 P ( X , Y ) P(X, Y) P(X,Y)。它关注于如何根…