返回
Vue 路由实现:揭秘动态、嵌套路由的奥秘
前端
2023-10-20 01:43:46
迈向动态路由的征程
Vue 路由无疑是构建单页应用(SPA)的利器,它使我们能够以一种优雅而直观的方式在页面之间导航。而动态路由则为 SPA 带来了无限的可能,它允许我们根据用户输入或服务器响应来动态地生成路由。
要实现动态路由,我们需要在路由规则中填写 props
为 true
。这会将路由参数传递给组件,让我们能够在组件内部通过 props
获取对应路由参数。
// 路由规则
const routes = [
{
path: '/user/:id',
component: UserDetail,
props: true,
},
];
例如,如果我们在浏览器地址栏输入 /user/123
,那么 UserDetail
组件就会收到一个名为 id
的 props
,其值为 123
。
// UserDetail.vue
<template>
<div>
<h1>用户 ID:{{ id }}</h1>
</div>
</template>
<script>
export default {
props: ['id'],
};
</script>
嵌套路由的无限可能
嵌套路由是将一个路由嵌套在另一个路由之下的技术,它为构建复杂的应用程序提供了极大的灵活性。
为了实现嵌套路由,我们需要使用 router-view
组件。router-view
是一个动态组件,它会渲染当前激活路由的组件。
// 路由规则
const routes = [
{
path: '/user/:id',
component: UserDetail,
children: [
{
path: 'profile',
component: UserProfile,
},
{
path: 'orders',
component: UserOrders,
},
],
},
];
// UserDetail.vue
<template>
<div>
<h1>用户 ID:{{ id }}</h1>
<router-view></router-view>
</div>
</template>
<script>
export default {
props: ['id'],
};
</script>
现在,当我们访问 /user/123/profile
时,UserProfile
组件就会被渲染在 UserDetail
组件内部。
Layout 组件:抽离公共部分,构建一致性
在构建复杂的单页应用时,我们会发现许多组件都具有相似的布局。为了避免重复代码,我们可以使用 Layout
组件来抽离这些公共部分。
// Layout.vue
<template>
<div>
<header>
<h1>我的应用</h1>
</header>
<main>
<router-view></router-view>
</main>
<footer>
<p>Copyright © 2023</p>
</footer>
</div>
</template>
<script>
export default {
};
</script>
// App.vue
<template>
<Layout>
<router-view></router-view>
</Layout>
</template>
<script>
export default {
};
</script>
这样,所有需要使用相同布局的组件都可以直接使用 Layout
组件,从而保持整个应用的一致性和代码的可维护性。
结语
动态路由、嵌套路由和 Layout
组件是 Vue 路由中的重要概念,掌握这些概念能够帮助我们构建更加灵活、高效和美观的单页应用。