【vue_3】关于超链接的问题

    • 1、需求
    • 2、修改前的代码
    • 3、修改之后
      • (1)第一次
      • (2)第二次
      • (3)第三次
      • (4)第四次
      • (5)第五次

1、需求

需求:要给没有超链接的列表添加软超链接

在这里插入图片描述

2、修改前的代码

<template #default="scope">
	<a :href="getBugUrl(scope.row.BUG列表)" target="_blank">
		{{ scope.row.BUG列表}}
	</a>
</template>
methods: {
    getBugUrl(bugId) {
      // 判断是否包含逗号
      if (bugId && !bugId.includes(',')) {
        return 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bugId;
      }
    },
  },

可以看到,上面的方法只有判断当bugId没有包含逗号的情况,因此我们需要自己补充当有多个值的情况。

3、修改之后

(1)第一次

<template #default="scope">
	<a :href="getBugUrl(scope.row.BUG列表)" target="_blank">
		{{ scope.row.BUG列表}}
	</a>
</template>
methods: {
getBugUrl(bugId) {
		// 判断是否包含逗号
		if (bugId) {
		if (!bugId.includes(',')) {
		// 单个数字的情况
		return 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bugId;
		} else {
		// 多个数字的情况,你可以根据实际情况构建超链接
		const bugArray = bugId.split(',');
		const bugUrls = bugArray.map(bug => 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bug);
		return bugUrls.join(', ');
		}
		}
	},
},

具体代码解释如下:

  • const bugArray = bugId.split(',');: 这一行代码首先将输入的bugId字符串使用split方法以逗号为分隔符拆分成一个数组,存储在bugArray常量中。这意味着如果bugId是一个包含多个bugId的字符串(以逗号分隔),那么现在每个bugId都会成为数组中的一个元素。

  • const bugUrls = bugArray.map(bug => 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bug);: 这一行使用map方法遍历bugArray数组中的每个元素(即每个bugId),并将其转换成对应的URL。生成的URL形式为 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bug,其中bug是当前迭代的bugId。生成的URL数组存储在bugUrls常量中。

  • return bugUrls.join(', ');: 最后,join方法将bugUrls数组中的每个URL用逗号加空格连接起来,并作为最终的结果返回。这意味着返回的字符串包含了多个bugId对应的URL,每个URL之间以逗号和空格分隔。

其中包含的map函数具体解释如下:
map 是JavaScript数组对象的一个方法,它用于对数组的每个元素执行提供的函数,并返回一个新的数组,包含每次函数调用的结果。

在这里,map 方法的具体实现是通过传递一个回调函数给 map 方法,这个回调函数接受数组中的每个元素,并返回一个经过处理后的新元素。在你提供的代码中,使用了箭头函数(=>),箭头函数是ES6引入的一种简写函数的方式,可以更简洁地定义匿名函数。

具体来说,这是箭头函数的语法:

  • map 是JavaScript数组对象的一个方法,它用于对数组的每个元素执行提供的函数,并返回一个新的数组,包含每次函数调用的结果。

  • 在这里,map 方法的具体实现是通过传递一个回调函数给 map 方法,这个回调函数接受数组中的每个元素,并返回一个经过处理后的新元素。在你提供的代码中,使用了箭头函数(=>),箭头函数是ES6引入的一种简写函数的方式,可以更简洁地定义匿名函数。

具体来说,这是箭头函数的语法:

(element) => {
  // 函数体
}

在这里插入图片描述

这里,(element) 是函数的参数,=> 表示箭头函数,后面是函数体。在你的代码中,箭头函数接受参数 bug,并返回一个新的字符串 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bug

所以,使用 map 的目的是对数组中的每个元素进行相同的操作,将每个元素映射为一个新的值,最终返回一个包含这些新值的新数组。在你的代码中,map 方法被用于将每个bugId映射为相应的URL。

(2)第二次

methods: {
  getBugUrls(bugId) {
    if (bugId) {
      if (!bugId.includes(',')) {
        // 单个数字的情况
        return ['http://XX.com.cn/XX_switch/bug/main?bugId=' + bugId];
      } else {
        // 多个数字的情况
        const bugArray = bugId.split(',');
        return bugArray.map(bug => 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bug);
      }
    }
    return [];
  },
},
<template #default="scope">
	<span v-for="bugUrl in getBugUrls(scope.row.BUG列表)">
		<a :href="bugUrl" target="_blank">{{ bugUrl }}
		</a>
		<br />
	</span>
</template>

由于这里使用了换行符,因此每个链接都换行了,现在虽然可以实现每个数值是各自的链接,但是却把整个网址都显示出来的,这肯定不符合我们的预期。

在这里插入图片描述

(3)第三次

下面这里把换行符换成使用逗号分隔了:

 <template #default="scope">
<span v-for="(bugUrl, index) in getBugUrls(scope.row.BUG列表)" :key="index">
 <a :href="bugUrl" target="_blank">
 {{ bugUrl }}
 </a>
 {{ index < scope.row.BUG列表.length - 1 ? ',' : '' }}
</span>
</template>

在这里插入图片描述

(4)第四次

下面这个修改的,相比于上面就多定义了一个方法,现在这里有两个方法:getBugUrl和extractBugId。

<template #default="scope">
	<span v-for="(bugUrl, index) in getBugUrl(scope.row.BUG列表)" :key="index">
		<a :href="bugUrl" target="_blank">{{ extractBugId(bugUrl) }}
		</a>
		{{ index < scope.row.BUG列表.length - 1 ? ',' : '' }}
	</span>
</template>
methods: {
    getBugUrl(bugId) {
      if (bugId) {
        if (!bugId.includes(',')) {
          // 单个数字的情况
          return ['http://XX.com.cn/XX_switch/bug/main?bugId=' + bugId];
        } else {
          // 多个数字的情况
          const bugArray = bugId.split(',');
          return bugArray.map(bug => 'http://XX.com.cn/XX_switch/bug/main?bugId=' + bug);
        }
      }
      return [];
    },
    extractBugId(bugUrl) {
      // 提取 bugId 后面的数字
      const match = bugUrl.match(/bugId=(\d+)/);
      return match ? match[1] : '';
    },
  },

getBugUrl 方法用于生成包含bugId对应URL的数组。

  • 首先检查输入的 bugId 是否存在,如果存在则进一步判断是否包含逗号。
  • 如果 bugId 不包含逗号,表示只有一个bugId,那么返回包含这个bugId对应URL的数组。
  • 如果 bugId 包含逗号,表示有多个bugId,那么先使用逗号拆分成数组,然后通过 map 方法将每个bugId映射为对应的URL,最后返回这个URL数组。
  • 如果 bugId 不存在,返回一个空数组。

extractBugId 方法用于从bugUrl中提取出bugId。

  • 使用正则表达式 match 方法,匹配以 bugId= 开头,后面跟着一个或多个数字的部分。
  • 如果匹配成功,返回匹配的第一个括号中的内容,即bugId。如果匹配不成功,返回空字符串。

为什么是match[1]不是match[0]呢?

对于 JavaScript 中的正则表达式匹配,match 方法返回一个数组,该数组的第一个元素是整个匹配的字符串,而从第二个元素开始是与正则表达式中的括号分组匹配的内容。因此,match[1] 获取的是第一个括号分组匹配的内容,而match[0] 获取的是整个匹配的字符串。

例如,考虑下面的代码:

const bugUrl = 'http://XX.com.cn/XX_switch/bug/main?bugId=123';
const match = bugUrl.match(/bugId=(\d+)/);

console.log(match[0]); // 整个匹配的字符串,即 "bugId=123"
console.log(match[1]); // 第一个括号分组匹配的内容,即 "123"

在这里插入图片描述
还有一个细节如下:对于碰到结构里面有v-if和v-else的逻辑,则两个都必须修改。

在这里插入图片描述

(5)第五次

但是尽管修改到现在已经差不多了,但是还有最后一个问题,就是如果只有一个数值的,这种情况其后面有逗号会不美观,因此我们需要去掉逗号。

但是这个时候我发现无论如何修改逻辑,逗号一直存在,这种时候怎么办呢?

思路:在getBugUrl方法的return之前的的bugArray,将其打印出来看一下,看看index是多少。此外,只打印index是看不出什么东西的,因此打印index的时候要顺带打印对应的id值。

在这里插入图片描述

其实问题就出现在这一行 <span v-if="index < scope.row.BUG列表.length - 1">,</span>,如何让只有一个数字的时候,让v-if失效?

后来发现,其实上面的代码当中scope.row.BUG列表.length得到的不是列表的个数,因为是字符串的每个字符的格式,因此修改如下:

<template #default="scope">
	<span v-for="(bugUrl, index) in getBugUrl(scope.row.BUG列表)" :key="index">
		<a :href="bugUrl" target="_blank">{{ extractBugId(bugUrl) }}
		</a>
	<span v-if="index < scope.row.BUG列表.length - 1 && scope.row.BUG列表.length > 7">,</span>
	</span>
</template>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单片机的串口通信

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、串口是什么&#xff1f;二、单片机结构讲解2.1 串口发送2.2串口接收2.3 还差点什么&#xff1f;2.3.1控制寄存器2.3.1.1 配置方式2.3.1.1 波特率 三、测试通…

Scanner常用知识点

在Java中&#xff0c;Scanner类是用于读取用户输入的工具类&#xff0c;可以从多种输入源读取数据&#xff0c;如标准输入流、文件或字符串。以下是一些Scanner类的常用知识点&#xff1a; Scanner的初始化&#xff1a;在使用Scanner类之前&#xff0c;需要先将其导入到你的Ja…

机器学习——多元线性回归升维

机器学习升维 升维使用sklearn库实现特征升维实现天猫年度销量预测实现中国人寿保险预测 升维 定义&#xff1a;将原始的数据表示从低维空间映射到高维空间。在线性回归中&#xff0c;升维通常是通过引入额外的特征来实现的&#xff0c;目的是为了更好地捕捉数据的复杂性&#…

二十九、微服务案例完善(数据聚合、自动补全、数据同步)

目录 一、定义 二、分类 1、桶(Bucket)聚合: 2、度量(Metric&#xff09;聚合: 3、管道聚合&#xff08;Pipeline Aggregation&#xff09;&#xff1a; 4、注意&#xff1a; 参与聚合的字段类型必须是: 三、使用DSL实现聚合 聚合所必须的三要素&#xff1a; 聚合可配…

【读懂AUTOSAR】DoIP模块(1)-- 使用场景和链接的建立规范

引子 --什么是?为什么使用DoIP? DoIP就是通过IP进行诊断的意思(Diagnostic Over IP)。我们熟悉的诊断都是通过CAN总线的啊,为什么要通过IP?IP是什么? IP就是Internet Protocol,就是”互联网协议“啦! 那DoIP就是通过互联网进行的诊断喽,也可以叫做“基于以太网的诊…

Sass基础知识详细讲解【附带表图】

文章目录 前言使用 SassRack / Rails / Merb插件缓存选项语法选择编码 Sass CSS扩展Sass 注释输出 Sass 脚本Sass -规则和指令Sass 控制指令和表达式 Sass 混入指令Sass 功能指令命名约定Sass 输出样式:nested:expanded:compact:compressedSass 扩展缓存存储自定义导入 后言 前…

电子学会C/C++编程等级考试2022年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中数的个数…

Pytorch-gpu环境篇

最最最头疼的就是配环境了 包之间的版本匹配问题 INSTALLING PREVIOUS VERSIONS OF PYTORCH 要考虑到pytorch和torchvision之间的匹配关系 显卡版本匹配问题

小航助学题库蓝桥杯题库stem选拔赛(23年8月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

达索系统3DEXPERIENCE WORKS 2024电磁仿真功能

在设计工作中&#xff0c;将复杂的模型进行网格分割是必不可少的一步&#xff0c;这样可以化繁而简&#xff0c;也可以让后续的工作更容易开展。 电磁仿真可帮助您在复杂、嘈杂的电磁环境中提高效率&#xff0c;在确保兼容性的同时&#xff0c;保障出众性能。 一系列专用求解器…

【论文阅读】ActiveNeRF:通过不确定性估计候选新视图

【论文阅读】ActiveNeRF: Learning where to See with Uncertainty Estimation Abstract1 Introduction3 Background4 NeRF with Uncertainty Estimation5 ActiveNeRF5.1 Prior and Posterior Distribution5.2 Acquisition Function5.3 Optimization and Inference 6 Experimen…

nodejs+vue+elementui足球篮球联赛系统

系统主要是以后台管理员管理为主。管理员需要先登录系统然后才可以使用本系统&#xff0c;管理员可以对个人中心、用户管理、赛事信息管理、球队信息管理、球员信息管理、比赛分值板管理、系统管理等进行添加、查询、修改、删除&#xff0c;以保障足球联赛管理系统的正常运行。…

位图/布隆过滤器+海量数据处理总结

位图 题目&#xff1a; 第一种方法&#xff1a;二分查找。虽然二分的时间复杂度为o(log n),但是这个方法是不可行的&#xff0c;我们就算假设这40亿个数据是已经排序完成了的数据&#xff0c;但是40亿个整数在内存需要消耗的内存就是差不多16G&#xff0c;这个消耗是非常巨大的…

Ubuntu 22.03 LTS 安装deepin-terminal 分屏

安装 源里面自带了这个软件&#xff0c;可以直接装 sudo apt install deepin-terminal 启动 按下Win键&#xff0c;输入deep即可快速检索出图标&#xff0c;点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口&#xff0c;鼠标点击可以切换…

互联网金融智能风险防控技术要求

《互联网金融智能风险防控技术要求》 8月6日&#xff0c;国家市场监督管理总局和国家标准化管理委员会发布《互联网金融智能风险防控技术要求》&#xff08;GB/T 42929-2023&#xff09;&#xff08;以下简称“《要求》”&#xff09;&#xff0c;将于2023年12月1日实施。 《要…

priority_queue优先级队列基本使用

目录 介绍 头文件 基本使用 constructor empty size top push pop swap 使用 大根堆 小根堆 结果 介绍 类似于堆 头文件 #include <queue> 基本使用 constructor empty 判空 size 元素个数 top 堆顶元素 push 入元素 pop 弹出堆顶元素 swap …

快速搭建一个SpringCloud、SpringBoot项目 || 项目搭建要点

1. 基本结构 建立springcloud项目从表入手&#xff0c;分析好需求建立表结构后&#xff0c;使用mybatis-plux生成POJO类&#xff0c;在对应的model模块中。 2. 微服务部分架构 2.1 依赖 service 微服务模块的依赖仅包含如下&#xff0c;数据库等依赖包含在model中&#xff0c…

Linux 内核栈保护

栈保护可以检测栈被写坏的情况。如果怀疑有此类情况&#xff0c;可以将栈保护打开试试 详细可参考文章 栈保护杂记-CSDN博客 栈保护开启 下图是关于strong的解释&#xff0c;在什么情况下会加入栈保护 后面由于gcc版本的原因&#xff0c;好像不支持开启栈保护。后面再进行效果…

红黑树(万字图文详解)

红黑树 1. 红黑树的概念2. 红黑树的性质3. 红黑树节点的定义4. 红黑树结构5. 红黑树的插入操作5.1 按照二叉搜索的树规则插入新节点5.2 检测新节点插入后&#xff0c;红黑树的性质是否造到破坏5.2.1 情况一: cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u存在且为红…

C_6微机原理

一、单项选择题&#xff08;本大题共 15小题&#xff0c;每小题3分&#xff0c;共45分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;请将选定的答案填涂在答题纸的相应位置上。 n1 位有符号数 的补码表示范围为&#xff08;&#xff09; A. -2n&l…