前几天使用的router-link
功能主要是产生超连结最基础的方式,但其实他有很多变化方式。
to的属性其实是在Vue router中执行了router.push
这个方法,他会在history增加一个新的纪录,所以按下返回时可以从记录中抓取并回到上一页。
除了纯文字还有以下形式:
<!-- 与 v-bind 绑定,省略 path -->
<router-link :to="'/home'">Home</router-link>
<!-- 指定 path,作用与前面一样 -->
<router-link :to="{ path: '/home' }">Home</router-link>
<!-- 搭配具名路由 -->
<router-link :to="{ name: 'user', params: { userId: '123' }}">User</router-link>
<!-- 搭配 query 参数, 编译後的结果会出现在 queryString: `/register?plan=private` -->
<router-link :to="{ path: '/register', query: { plan: 'private' }}"> Register </router-link>
他不像to有在history留下纪录,而是执行router.replace
替换当前的history纪录,因此没有上下页切换功能。
<router-link to="/home" replace>Home</router-link>
过去要去操控active class样式时,要看url是否符合连结并下判断
<template>
<ul>
<li><a :class="{ 'active': location.pathname === '/' }" href="/">Home</a></li>
<li><a :class="{ 'active': location.pathname === '/list' }" href="/list">List</a></li>
<li><a :class="{ 'active': location.pathname === '/about' }" href="/about">About</a></li>
</ul>
</template>
当完全符合的话可以加上exact
属性,此时的预设样式会改为router-link-exact-active
<router-link to="/">Home</router-link>
<!-- 选染後的画面 -->
<a href="/list" class="router-link-active router-link-exact-active">Home</a>
如果路由符合,会套用router-link-active
样式,所在的位置为list/123
就不会出现exact-active-class
<router-link to="/list">List</router-link>
<!-- 选染後的画面 -->
<a href="/list" class="router-link-active">List</a>
router-link也有提供一个slot功能,透过一些属性的设定可以替还原本的结构。
<router-link
to="/about"
custom
v-slot="{ href, route, navigate, isActive, isExactActive }">
<NavLink :active="isActive" :href="href" @click="navigate">
{{ route.fullPath }}
</NavLink>
</router-link>
href
给a
标签使用route
传入物件navigate
触法路由事件函式,必要时阻止事件执行
isActive
回传目前路由是否与url目标相符合(Boolean),可以取代预设的router-link-active
isExactActive
回传路由正规是否完全符合(Boolean),可以取代预设的router-link-exact-active
举例,若希望router-link渲染出button的话...
<router-link to="/about" custom v-slot="{ navigate }">
<button @click="navigate" role="link">About Us</button>
</router-link>
<!--结果-->
<button role="link">About Us</button>
若
<a>
标签有使用target="_blank"
,则navigate
会被忽略。
前面提到的to和replace可以用router.push
和router.replace
操作网站的路由
// 透过字串指定 URL
router.push('/users/eduardo')
// 透过物件与 path 指定
router.push({ path: '/users/eduardo' })
// 与具名路由、params 搭配
router.push({ name: 'user', params: { username: 'eduardo' } })
// 以 query 指定目标的 query string
router.push({ path: '/register', query: { plan: 'private' } })
// 搭配 hash, 执行後的结果为 /about#team
router.push({ path: '/about', hash: '#team' })
Vue Router
https://router.vuejs.org/zh/guide/essentials/navigation.html
Router 基本入门 Day 9
https://ithelp.ithome.com.tw/articles/10214449
<<: 【从零开始的 C 语言笔记】第一篇-安装程序码编辑器
那今天,我打算一步一步写出演算法,顺便跟大家分享关於我的理解,首先决策树算法有ID3和C4.5和CA...
前言 今天要将 RecipeFeaturedView 中的图片变成可点开的, 点开後会显示相应的 D...
先前 Google 取消无限制文件云端空间与无限制相簿空间後,大家哀鸿遍野。而原本不受影响的 GSu...
这一届的 IT 铁人赛,本来排开了很多事情,想要来挑战4个题目,还为了影片组买了一些器材。 但果然,...
上一篇提到改变其他脚本的全域变数 这一篇针对场景间保留数据的方法作探讨。 在unity换场景(sce...