如何在SvelteKit中重定向到页面?

回答 2 浏览 9303 2022-12-14

我有一个页面,其内容是从一个SvelteKit商店渲染的。如果商店是无效的,用户需要被重定向到主页。不幸的是,即使不检查任何条件,我也找不到重定向用户的方法,所以让我们专注于一个更简单的问题:如何总是从某个网页重定向到主页?

我已经尝试了以下方法,这些方法对我都不起作用:

  • 在页面上的脚本标签前使用<script context="module">,如下所示:
<script context="module">
    export async function load() {
        return {
            status: 302,
            redirect: "/"
        };
    }
</script>
  • 在+page.js文件中使用了PageLoad:
/** @type {import('./$types').PageLoad} */
export function load() {
    return {
        status: 302,
        redirect: '/'
    };
}

当我使用上面提到的代码时,网站就像没有改变一样,我没有得到任何错误,但重定向没有发生。如果我意外地进入该页面(在搜索栏中输入地址,商店还没有准备好),我会被重定向到错误页面,因为有错误发生(我想通过主页重定向来防止)。如果我在预期的情况下进入该页面(商店没有问题),该页面会正常呈现,没有重定向发生。

Theo 提问于2022-12-14
2 个回答
#1楼 已采纳
得票数 12

请参阅文档

你必须抛出一个redirect

import { redirect } from '@sveltejs/kit';
 
export function load() {
  // ...
  throw redirect(302, '/');
}

在页面上,人们会使用goto

H.B. 提问于2022-12-15
H.B. 修改于2023-03-04
是的,但如果我想在加载功能之外做这件事呢?例如,在一个+page.svelte文件中HomeIsWhereThePcIs 2023-01-19
#2楼
得票数 1

根据文档页面,你会使用goto(theurl)。例子:

import { goto } from '$app/navigation';
// ...Your other imports

goto('/redirectpage');

或者,如果你喜欢使用本地方法,那么在文件.svelte中,你可以这样做、

如果你没有使用SSR,那么这一点:

window.location.href = '/redirectpage';

或者,如果你正在使用SSR,那么就这样:

import { browser } from '$app/environment';
// ...Your other imports

if (browser) { // to prevent error window is not defined, because it's SSR
    window.location.href = '/redirectpage';
}
Kevin Niam 提问于2023-03-20
Kevin Niam 修改于2023-03-20