javascript SvelteKit:我怎样做基于slug的动态路由?

zfycwa2u  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(192)

我是一个新手在苗条和一般的编码。我宁愿学习苗条套件(苗条@下一个),而不是工兵,因为这似乎是苗条的方向。
对于我的个人项目,我需要支持基于url插件的动态路由。我如何在SvelteKit中做到这一点?例如,如果我有/blog目录,需要基于它的“id”拉取内容,我将如何做到这一点?
我遇到困难的部分是访问URL slug参数。
先谢了。

wnavrhmk

wnavrhmk1#

  • 您可以创建一个带有[方括号]的文件:touch src/routes/blog/[slug].svelte

并粘贴以下代码

<script>
    import { page } from '$app/stores';
</script>

{$page.params.slug}

然后导航到您的应用http://localhost:3000/blog/123
你应该会看到你的结果

要为http://localhost:3000/blog页面创建内容,可以修改src/routes/blog/index.svelte

vs3odd8k

vs3odd8k2#

从SvelteKit 1.0开始,路径应为括号中的目录,例如,对于/blog/<slug>,您将添加以下内容:

src/routes/blog/[slug]
  |_ +page.js
  |_ +page.svelte

然后在src/routes/blog/[slug]/+page.js中,您可以添加如下内容

export const load = ({ params }) => {
    return {
        slug: params.slug
    }
}

它会将它作为data属性返回给+page.svelte,因此您可以编写如下内容:

<script>
    export let data;
</script>

<h1>{data.slug}</h1>

参考:https://kit.svelte.dev/docs/routing

anhgbhbe

anhgbhbe3#

警告--我回复中的信息可能在SvelteKit成熟时无效,但从我迄今为止所做的实验来看,这是有效的:
基于参数的路由类似于sveltejs/sapper-template。你应该先学习Sapper是如何做的。假设我有一个路由blog,它有一个参数段(/blog/page-1 & /blog/page-2)
1.在route/blog中创建名为[slug].svelte的route组件
1.复制sveltejs/sapper-template示例中的内容。
1.将preload函数重命名为load,并使用单个参数,例如ctx
1.更改return对象,将slug属性附加到props

export async function load(ctx) {
  let slug = ctx.page.params.slug
  return { props: { slug }}
}

如果您的博客有多个slug参数(/blog/2021/01/29/this-is-a-slug),您可以删除[slug].svelte并创建一个名为[...data].svelte的文件,然后将加载方法更改为:

export async function load(ctx) {
  let [year, month, day, slug] = ctx.page.params.data;
  return { props: { data: { year, month, day, slug }}}
}

不要忘记将data属性定义为一个对象。下面是一个 typescript 示例:

<script lang="ts">
    export let data: { slug:  string, year: number, month: number, day: number };
</script>

从那里使用{data.slug}等值
快乐黑客

相关问题