千家信息网

vue路由怎么遍历生成复数router-link

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍了vue路由怎么遍历生成复数router-link的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue路由怎么遍历生成复数router-link文章都会有
千家信息网最后更新 2025年02月03日vue路由怎么遍历生成复数router-link

这篇文章主要介绍了vue路由怎么遍历生成复数router-link的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue路由怎么遍历生成复数router-link文章都会有所收获,下面我们一起来看看吧。

需求:顶部导航栏控制下方内容栏,实现页面内切换。

毫无疑问,vue-router很适合这样的需求,实现起来也并不复杂:

1、main.js:

import VueRouter from 'vue-router'Vue.use(VueRouter);

2、定义(路由)组件:

import songList from './components/songList.vue' const Bar = { template: '
no.2
' }const Baz = { template: '
no.3
' }const Fun = { template: '
no.4
' }

这里的组件也可以从外部导入,说起来应该是正确的做法,博主为了演示方便才直接写在里面了...

3、定义路由:

const routes = [ { path: '/新歌', component: songList }, { path: '/排行', component: Bar }, { path: '/榜单', component: Baz }, { path: '/歌手', component: Fun }, { path: '*', redirect: '/新歌' }]

注意,最后设置了一个重定向路由,目的是当路径不属于以上任意一个时,匹配到'新歌'页面;说白了也就是设置初始页的路由。

4、创建router实例:

const router = new VueRouter({ routes//等价routes: routes})

5、创建和挂载根实例:

new Vue({ router, el: '#app', render: h => h(App)})

navBar.vue:

在组件页面上,按照常理应该分别写出具体数目的导航标签,类似下面这样:

新歌排行榜单歌手

但实际运用上有个小问题,就是像这样重复样式的路由入口真的有必要每个都写一遍么?唯一的区别仅仅是to属性不同?

万一今后碰到十几、二十个怎么办?

于是换个思路,尝试遍历数组来生成复数个路由入口:

  {{ bar }} 

大致如上,title是一个所有名目的数组:[ 新歌,排行,榜单,歌手,... ],Index索引用来绑定key值。现在唯一的问题 就是to也就是路由入口路径该怎么写?

由于每个都会渲染成不同出口,所以不能写成绝对路径。

方案一:将main.js中的路径都变成title中的名称,再在to中用拼接字符串实现动态匹配。

实际操作下来发现并不可取,因为在html中只会识别to=""中双引号内的内容,更不能使用'+'这类js才能识别的拼接符号。

方案二:使用编程式导航,

methods: { linkChange: function (bar) {  this.$router.push({ path: '/'+bar}); } }  {{ bar }} 

这种方法将路径写在methods中就可以使用每次遍历数组获得的值,从而实现动态匹配。

为什么要给click事件加上native后缀?

这里是个很典型的router-link的小坑,因为浏览器会把router-link渲染成a标签,那么在router-link上添加的事件都会失效。

解决方案就是加上.native后缀来阻止原生事件。

但这种方式也有个很严重的BUG,即在遍历中使用编程式导航,会导致所有入口响应这个点击事件!

具体说来就是当用户点击某个路由,所有的入口都会被vue识别为选中路由,页面逻辑可能看不出来,

但只要加个.router-link-active { background: #f4f4f4 }这种vue给当前路由默认添加的class设置一个背景色,就能发现所有路由入口元素

一起变色!

这个bug在不使用遍历,依次给span设置路由的时候不会出现,具体原因希望有大神可以告知。

所以此方案也只能放弃。

方案三:

在html中绑定to属性,

  {{ bar }} 

想了太多复杂的方案,反而忽略了最基本的绑定to属性,

最方便的地方在于,大括号内既可以像我一样写完整路径,也可以直接写成:to="{ path: bar }",效果是一样的。

而且相比前面的方法,可以省去额外的点击事件,利用其本身的路径特性来完成。

到目前为止,需求可以算是基本完成,但细节还能不能更完美一点呢?

就拿这个例子来说,我们用span标签包裹了渲染成a标签的router-link,有时候我们想要选中的标签字体变成蓝色,同时span下面出现蓝色边框,

提高用户体验。那么使用.router-link-active改变a标签颜色是最方便的了,问题是上一级的span该如何添加样式呢?

似乎不添加额外class或id这种标识是无法实现功能的,但我在vue官网上看到这么一句话:"有时候我们要让 "激活时的CSS类名" 应用在外层元素,而不是 标签本身,那么可以用 渲染外层元素,包裹着内层的原生 标签"。

代码如下:

    {{ bar }}   

使用tag标签改变其渲染元素,包裹a标签。如此一来,.router-link-active添加span底边框,.router-link-active a 来改变字体颜色。不需要使用额外标记也能完成样式需求。

关于"vue路由怎么遍历生成复数router-link"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"vue路由怎么遍历生成复数router-link"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

路由 标签 入口 方案 路径 复数 事件 生成 元素 内容 就是 需求 页面 导航 包裹 属性 数组 样式 歌手 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 查找数据库有哪些职位 本地微数据库 中山市网络安全知识竞答答题 小米盒子连接服务器 网络安全法 网络安全教育 幼儿园网络安全情况总结 变压器自动绘图软件开发 腾讯网络安全运营中心 中国版服务器存档怎么导出 网络安全领域的人工智能 如何成为高中生网络安全专家 读取数据库框架 26岁还可以学软件开发吗 平顶山软件开发行业标准 有1个人加了服务器再摔死了 中国电信通信网络技术有限公司 广东鲸涛网络技术有限公司 徐州市网络安全监管平台 145个常用网络安全标准 数据库事务请求工作流程 惠普服务器的管理ip 计算机dns服务器没检测到响应 陕西汇春互联网科技有限公司 图片 云服务器 什么网络技术可用于营销 数据库取消党员否 安装常用的网络安全协议 互联网经济和金融科技的区别 论文查重的范围包括哪些数据库 注册登录数据库怎么连接
0