📅  最后修改于: 2023-12-03 14:56:18.438000             🧑  作者: Mango
在开发 web 应用时,很常见的一种需求就是在同一页面内展示不同的内容,例如对于一个博客应用,用户可以根据标签、作者、分类等信息来筛选文章,但是这些信息都是在同一页面上展示的。
在这个场景中,我们可以使用路由器来实现不同参数链接到同一页面的目的。
路由器是一种管理 URL 并将其映射到执行特定操作的代码的工具。路由器允许我们处理 URL,并且可以根据不同的 URL 参数来渲染不同的组件和页面。在许多前端框架中,路由器都是内置的功能,例如 Vue Router 和 React Router。
下面示例使用 Vue Router 来展示基本的路由器用法。在 Vue 应用中,我们可以使用 vue-router
包来添加路由器功能。
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from './views/Home.vue'
Vue.use(VueRouter)
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/about',
name: 'about',
component: () => import(/* webpackChunkName: "about" */ './views/About.vue')
}
]
})
export default router
上面的代码创建了一个包含两个路径的路由器:/
和 /about
。Home
组件对应 /
路径,About
组件对应 /about
路径。现在,我们可以在页面中使用这些链接:
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
在有些情况下,我们需要通过参数向路由器传递数据,例如我们想根据标签来展示文章列表。我们需要在路由器中定义一个带有参数的 URL,如 /articles/:tag
,其中 :tag
是标签参数。接下来我们可以在组件中使用 $route.params
来获取参数。
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/articles/:tag',
name: 'articlesByTag',
component: () => import(/* webpackChunkName: "articles" */ './views/Articles.vue')
}
]
})
// Articles.vue
export default {
data() {
return {
tag: this.$route.params.tag
}
}
}
注意,我们可以在 path
中使用 :
来定义参数,路由器会将 :
后的文本解析为参数名称。在组件中,我们可以通过 $route
访问参数。上面的代码片段展示了如何在 Articles.vue
组件中获取 tag
参数并将其存储在组件的 data
中。
现在,我们可以在页面中使用以下链接:
<router-link :to="{ path: '/articles/javascript' }">JavaScript Articles</router-link>
<router-link :to="{ path: '/articles/css' }">CSS Articles</router-link>
我们还可以在定义路由器时使用抽象路径和命名路由来提高代码的可读性和维护性。抽象路径是一种以 /
开头但没有具体路径的路径,它不对应具体的组件或页面,只是一个逻辑上的路径。命名路由是一种带有名称的路由,可以在代码中使用名称来代替路径。
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/',
component: Layout,
children: [
{
path: '',
name: 'home',
component: Home
},
{
path: '/articles',
component: Articles,
children: [
{
path: '',
name: 'articles',
component: AllArticles
},
{
path: ':tag',
name: 'articlesByTag',
component: FilteredArticles
}
]
}
]
}
]
})
在上面的例子中,我们定义了一个抽象路径 /
,它不对应具体的组件或页面,但是它包含了应用的主体部分,如头部、导航和页脚等。它包含了两个命名路由:home
和 articles
。articles
还有一个子路由 /articles/:tag
,对应的名字是 articlesByTag
。
现在,我们可以使用以下链接:
<router-link :to="{ name: 'home' }">Home</router-link>
<router-link :to="{ name: 'articles' }">All Articles</router-link>
<router-link :to="{ name: 'articlesByTag', params: { tag: 'javascript' } }">JavaScript Articles</router-link>
在本文中,我们介绍了如何使用路由器来将不同的参数链接到同一页面。我们学习了一些基本的路由器用法,包括路由器的定义、如何传递参数以及如何使用抽象路径和命名路由等。使用路由器可以将 URL 与应用的状态捆绑在一起,同时也可以提高应用的可读性和维护性。