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

The*_*heo 21 redirect svelte sveltekit

我有一个页面,其中包含从 SvelteKit 商店呈现的内容。如果商店无效,则需要将用户重定向到主页。不幸的是,即使不检查任何条件,我也找不到重定向用户的方法,所以让我们关注一个更简单的问题:如何始终从某个页面重定向到主页?

我尝试过以下方法,但这些方法都不适合我:

  • 在页面中使用<script context="module">before script标签如下:
<script context="module">
    export async function load() {
        return {
            status: 302,
            redirect: "/"
        };
    }
</script>
Run Code Online (Sandbox Code Playgroud)
  • 在 +page.js 文件中使用 PageLoad:
/** @type {import('./$types').PageLoad} */
export function load() {
    return {
        status: 302,
        redirect: '/'
    };
}
Run Code Online (Sandbox Code Playgroud)

当我使用上面提到的代码时,网站的工作方式就像没有任何更改一样,我没有收到任何错误,但重定向不会发生。如果我意外地到达该页面(在搜索栏中输入其地址,商店尚未准备好),我会被重定向到错误页面,因为发生了错误(我想通过主页重定向来防止)。如果我按预期到达该页面(商店很好),则页面会正常呈现,不会发生重定向。

H.B*_*.B. 37

请参阅SvelteKit 重定向文档

import { redirect } from '@sveltejs/kit';
 
export function load() {
  // ...
  redirect(302, '/'); // needs `throw` in v1
}
Run Code Online (Sandbox Code Playgroud)

在页面上,人们会使用goto.

  • 是的,但是如果我想在加载函数之外执行此操作怎么办?例如,在 `+page.svelte` 文件中 (8认同)

小智 15

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

import { goto } from '$app/navigation';
// ...Your other imports
    
goto('/redirectpage');
Run Code Online (Sandbox Code Playgroud)

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

如果您不使用SSR,那么:

window.location.href = '/redirectpage';
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是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';
}
Run Code Online (Sandbox Code Playgroud)