如何在 sveltekit 中获取查询字符串参数?

cho*_*ovy 33 svelte svelte-3 sveltekit

我正在尝试/login?ref=/some/path登录后重定向到的参数:

const ref = $page.url.searchParams.get('ref') || '/dashboard';
Run Code Online (Sandbox Code Playgroud)

但是我收到这个错误:

TypeError: Cannot read properties of undefined (reading 'searchParams')

Bit*_*om8 36

上述解决方案将不起作用。这是新方法:

export async function load({ params, url }) {
    let lang = url.searchParams.get('lang');
    let q = url.searchParams.get('q');
    return { lang, q };
}
Run Code Online (Sandbox Code Playgroud)

然后,请按如下方式到达:

import { page } from '$app/stores';
$page.data.q
Run Code Online (Sandbox Code Playgroud)

感谢理查德,这比export var lang在每一页中确认要好得多

  • 为什么要解构参数?你没有使用它。另外,“$page.data”用于页面**需要从子页面或布局访问数据**:https://kit.svelte.dev/docs/load#using-url-data https: //kit.svelte.dev/docs/load#$page-data (2认同)
  • @Big_Boulard 你也可以像这样 `$page.url.searchParams.get("q")` 现在使用最新的 sveltekit,不需要 `load({ params, url })` (2认同)

Jax*_*axx 27

您可以从传递给页面函数的url对象的属性中获取查询字符串参数:load

<script context="module">
  export function load({ url }) {
    const ref = url.searchParams.get('ref') || '/dashboard';
    return {
      props: {
        ref
      }
    };
  }
</script>
<script>
  export let ref;

  // do stuff
</script>
Run Code Online (Sandbox Code Playgroud)

有关该load函数、其输入格式及其反应性的更多信息,请参见此处(SvelteKit 文档)。

  • 有没有办法从“$page”获取它? (2认同)

小智 23

您可以使用以下示例:

import { page } from '$app/stores'

$page.url.searchParams.get('ref')
Run Code Online (Sandbox Code Playgroud)