Skip to main content
Svelte 基础
介绍
响应式
属性
逻辑
事件
绑定
类和样式
Actions
过渡动画
Svelte 进阶
高级响应性
复用内容
Motion
高级绑定
高级过渡效果
Context API
特殊元素
<script module>
后续步骤
SvelteKit 基础
介绍
路由
加载数据
请求头和 Cookie
共享模块
表单
API 路由
$app/state
错误和重定向
SvelteKit 进阶
钩子函数
页面选项
链接选项
高级路由
高级加载
环境变量
结论

正如我们在路由介绍中看到的,布局是一种在不同路由之间共享 UI 和数据加载逻辑的方式。

有时使用布局而不影响路由是很有用的 — 例如,你可能需要 /app/account 路由在身份验证后面,而 /about 页面对所有人开放。我们可以使用路由分组来实现这一点,它是一个带括号的目录。

通过将 account 重命名为 (authed)/account,然后将 app 重命名为 (authed)/app 来创建一个 (authed) 分组。

现在我们可以通过创建 src/routes/(authed)/+layout.server.js 来控制这些路由的访问:

src/routes/(authed)/+layout.server
import { redirect } from '@sveltejs/kit';

export function load({ cookies, url }) {
	if (!cookies.get('logged_in')) {
		redirect(303, `/login?redirectTo=${url.pathname}`);
	}
}

如果你尝试访问这些页面,你将被重定向到 /login 路由,该路由在 src/routes/login/+page.server.js 中有一个表单 action,用于设置 logged_in cookie。

我们还可以通过添加一个 src/routes/(authed)/+layout.svelte 文件来为这两个路由添加一些 UI:

src/routes/(authed)/+layout
<script>
	let { children } = $props();
</script>

<form method="POST" action="/logout">
	<button>log out</button>
</form>
<script lang="ts">
	let { children } = $props();
</script>

<form method="POST" action="/logout">
	<button>log out</button>
</form>

在 GitHub 编辑此页面

上一页 下一页
1
2
3
4
<h1>home</h1>
 
<p>this is the home page.</p>