有很多方法可以解决这个问题,我想说它们与您的前端堆栈更相关。由于这个问题是用 vue.js 标记的,我将根据它来回答。
方法#1
这里的惯性部分只是创建一个布局——它基本上只是一个 vue 组件。然后该布局包含侧面和顶部导航以及填充正文内容的插槽。然后,您可以通过添加导出来创建利用该布局的仪表板页面组件layout: myDashboardLayout
。
为了获得相同的效果,您基本上会路由到不同的视图,这些视图将不同的插槽传递给布局及其各自的数据。
// Your DashboardLayout.vue
<template>
<div>
<my-sidebar :data="foo" />
<my-topbar :data="bar" />
<slot name="dashboardContent" />
</div>
</template>
// Your Dashboard/Index.vue
<template>
<main slot="dashboardContent" :data="myData" />
</template>
<script>
import DashboardLayout from './DashboardLayout'
export default {
// Using the shorthand
layout: DashboardLayout,
}
</script>
//web.php
Route::get('/dashboard', function(){
return Inertia::render('Dashboard/Index', [data]);
});
Route::get('/dashboard/foo', function(){
return Inertia::render('Dashboard/Index', [fooData]);
});
Route::get('/dashboard/bar', function(){
return Inertia::render('Dashboard/Index', [barData]);
});
然后,您要么访问domain.com/dashboard/foo
或domain.com/dashboard/bar
方法#2
具有相同的布局视图,但传递了一个“选项卡视图”组件。您根本不会切换路线并为该选项卡视图组件提供道具来呈现三个不同的选项卡。
根据数据,当您预先获取所有内容时,这种方法可能会更慢。
使用 #1 您可以按需获取数据,并且由于它是 SPA,因此用户不会注意到差异。
#1 的另一个好处是,用户实际上可以主动访问该特定选项卡并将其 URL 添加到书签以进行频繁访问。您可以对锚点/哈希执行相同的操作,但毕竟您使用的是 SPA。
我可以继续,但选择任何一个选项,或者这足以给你一些灵感。