```js // @noErrors import { afterNavigate, beforeNavigate, disableScrollHandling, goto, invalidate, invalidateAll, onNavigate, preloadCode, preloadData, pushState, replaceState } from '$app/navigation'; ``` ## afterNavigate 一个在当前组件挂载时运行提供的 `回调` 的生命周期函数,并且每次我们导航到 URL 时也会运行。 `afterNavigate` 必须在组件初始化期间调用。只要组件挂载,它就保持激活状态。 ```dts function afterNavigate( callback: ( navigation: import('@sveltejs/kit').AfterNavigate ) => void ): void; ``` ## 在导航之前 一个在我们导航到 URL 之前触发的导航拦截器,无论是通过点击链接、调用`goto(...)`,还是使用浏览器的后退/前进控件。 调用 `cancel()` 将阻止导航完成。如果 `navigation.type === 'leave'` —— 表示用户正在离开应用(或关闭标签页)—— 调用 `cancel` 将触发原生的浏览器卸载确认对话框。在这种情况下,导航可能会取消,也可能不会取消,具体取决于用户的响应。 當導航不是指向 SvelteKit 擁有的路徑(因此由 SvelteKit 的客戶端路由器控制)時,`navigation.to.route.id`將會是`null`。 如果导航(如果没有取消)会导致文档卸载——换句话说,`'离开'`导航和`'链接'`导航,其中`navigation.to.route === null`——则`navigation.willUnload`为`true`。 `beforeNavigate` 必须在组件初始化期间调用。只要组件挂载,它就保持激活状态。 ```dts function beforeNavigate( callback: ( navigation: import('@sveltejs/kit').BeforeNavigate ) => void ): void; ``` ## 禁用滚动处理 如果页面在导航后更新时被调用(在`onMount`或`afterNavigate`或执行某个操作时,例如),这将禁用 SvelteKit 的内置滚动处理。这通常是不被推荐的,因为它会打破用户的期望。 ```dts function disableScrollHandling(): void; ``` ## 转到 允许您以编程方式导航到指定路由,包括保持当前元素聚焦等选项。返回一个当 SvelteKit 导航(或未能导航,此时承诺拒绝)到指定 `url` 时解决的 Promise。 对于外部 URL,请使用`window.location = url`代替调用`goto(url)`。 ```dts function goto( url: string | URL, opts?: | { replaceState?: boolean | undefined; noScroll?: boolean | undefined; keepFocus?: boolean | undefined; invalidateAll?: boolean | undefined; invalidate?: | (string | URL | ((url: URL) => boolean))[] | undefined; state?: App.PageState | undefined; } | undefined ): Promise; ``` ## 无效 导致属于当前活动页面的任何`加载`函数在它们依赖于所涉及的问题`URL`的情况下重新运行,通过`fetch`或`depends`。当页面随后更新时,返回一个`Promise`,该 Promise 将解决。 如果参数以`字符串`或`URL`的形式给出,它必须解析为传递给`fetch`或`depends`(包括查询参数)的相同 URL。要创建自定义标识符,请使用以`[a-z]+:`(例如`custom:state`)开头的字符串——这是一个有效的 URL。 The `function` argument can be used to define a custom predicate. It receives the full `URL` and causes `load` to rerun if `true` is returned. This can be useful if you want to invalidate based on a pattern instead of an exact match. ```ts // Example: Match '/path' regardless of the query parameters import { invalidate } from '$app/navigation'; invalidate((url) => url.pathname === '/path'); ``` ```dts function invalidate( resource: string | URL | ((url: URL) => boolean) ): Promise; ``` ## 无效所有 导致当前活动页面中属于所有 `load` 函数重新运行。返回一个在页面随后更新时解决的 `Promise`。 ```dts function invalidateAll(): Promise; ``` ## 在导航中 一个在导航到新 URL 之前立即运行提供的`回调`的生命周期函数,除了在整页导航期间。 如果您返回一个 `Promise`,SvelteKit 将在完成导航之前等待其解析。这允许您——例如——使用 `document.startViewTransition`。避免解析缓慢的承诺,因为导航将看起来对用户停滞不前。 如果从回调中返回一个函数(或一个解析为函数的 `Promise`),则将在 DOM 更新后调用该函数。 `onNavigate`必须在组件初始化期间调用。只要组件挂载,它就保持激活状态。 ```dts function onNavigate( callback: ( navigation: import('@sveltejs/kit').OnNavigate ) => MaybePromise<(() => void) | void> ): void; ``` ## 预加载代码 程序化导入尚未获取的路由代码。通常,您可能会调用此功能以加快后续导航。 您可以通过任何匹配的路径名来指定路由,例如 `/about`(以匹配 `src/routes/about/+page.svelte`)或 `/blog/*`(以匹配 `src/routes/blog/[slug]/+page.svelte` )。 不同于 `preloadData`,这不会调用 `load` 函数。返回一个在模块导入完成后解决的 Promise。 ```dts function preloadCode(pathname: string): Promise; ``` ## 预载数据 程序预加载指定页面,即 1. 确保页面代码已加载, 2. 调用页面加载函数,使用适当的选项。 这是 SvelteKit 在用户点击或鼠标悬停在具有``元素和`data-sveltekit-preload-data`的情况下触发的相同行为。如果下一次导航到`href`,将使用加载返回的值,使导航瞬间完成。在预加载完成后,返回一个解析为新路由`load`函数运行结果的 Promise。 ```dts function preloadData(href: string): Promise< | { type: 'loaded'; status: number; data: Record; } | { type: 'redirect'; location: string; } >; ``` ## pushState 程序创建一个新的历史条目,使用给定的 `page.state`。要使用当前 URL,可以将`''`作为第一个参数传递。用于[浅层路由](/docs/kit/shallow-routing)。 ```dts function pushState( url: string | URL, state: App.PageState ): void; ``` ## 替换状态 程序替换当前历史条目为给定的 `page.state`。要使用当前 URL,可以将 `''` 作为第一个参数传递。用于 [浅层路由](/docs/kit/shallow-routing)。 ```dts function replaceState( url: string | URL, state: App.PageState ): void; ```