使用“goto”/Sveltekit 导航返回上一页

yon*_*lee 16 sveltekit

我通常使用以下内容重定向到任何页面,而不window.location.href在 Sveltekit 中使用

import { goto } from '$app/navigation';

const goSomeWhere = () :void => {
    goto('/')
}
Run Code Online (Sandbox Code Playgroud)

但是我们如何让它返回到上一页呢?我应该使用普通 JavaScript 来返回吗?

yon*_*lee 16

您可以使用生命周期返回到上一页afterNavigate

这比 @Jarduilno 的建议更可靠,因为并非每个传入链接都位于同一父路径中。

存储 URL 对象中的路径名from,并稍后在函数中使用它。前任: goto(previousPage)

import { goto, afterNavigate } from '$app/navigation';
import { base } from '$app/paths'

let previousPage : string = base ;

afterNavigate(({from}) => {
   previousPage = from?.url.pathname || previousPage
}) 
Run Code Online (Sandbox Code Playgroud)

  • 一旦您以这种方式返回到另一个页面,您来自的页面将是“上一个”,因此如果您再次单击按钮,您将转到您来自的页面,从而从这两个页面进行循环 (7认同)

小智 11

您可以像这样使用 javaScript 历史对象history.back();

  • 它不会触发重组。 (7认同)
  • 对我有用。由于 SvelteKit 应该正确处理 Web 浏览器中“后退”按钮的点击,因此它也应该能够以这种方式正确处理后退导航(我认为 SvelteKit 不存在区分这两种方式的方法)。 (2认同)

Jar*_*ino 5

在我们的 SvelteKit 项目中,我们有时会导航到上一页,如下例所示

import { goto } from '$app/navigation';
import { page } from '$app/stores';

const goSomeWhereBack = () => {
    goto($page.url.pathname.substring(0, $page.url.pathname.lastIndexOf('/')));
}
Run Code Online (Sandbox Code Playgroud)