我是一个新手在苗条和一般的编码。我宁愿学习苗条套件(苗条@下一个),而不是工兵,因为这似乎是苗条的方向。对于我的个人项目,我需要支持基于url插件的动态路由。我如何在SvelteKit中做到这一点?例如,如果我有/blog目录,需要基于它的“id”拉取内容,我将如何做到这一点?我遇到困难的部分是访问URL slug参数。先谢了。
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/123
要为http://localhost:3000/blog页面创建内容,可以修改src/routes/blog/index.svelte
http://localhost:3000/blog
src/routes/blog/index.svelte
vs3odd8k2#
从SvelteKit 1.0开始,路径应为括号中的目录,例如,对于/blog/<slug>,您将添加以下内容:
/blog/<slug>
src/routes/blog/[slug] |_ +page.js |_ +page.svelte
然后在src/routes/blog/[slug]/+page.js中,您可以添加如下内容
src/routes/blog/[slug]/+page.js
export const load = ({ params }) => { return { slug: params.slug } }
它会将它作为data属性返回给+page.svelte,因此您可以编写如下内容:
data
+page.svelte
<script> export let data; </script> <h1>{data.slug}</h1>
参考:https://kit.svelte.dev/docs/routing
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,并使用单个参数,例如ctx1.更改return对象,将slug属性附加到props
sveltejs/sapper-template
blog
[slug].svelte
preload
load
ctx
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的文件,然后将加载方法更改为:
[...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}等值快乐黑客
{data.slug}
3条答案
按热度按时间wnavrhmk1#
touch src/routes/blog/[slug].svelte
并粘贴以下代码
然后导航到您的应用
http://localhost:3000/blog/123
你应该会看到你的结果
要为
http://localhost:3000/blog
页面创建内容,可以修改src/routes/blog/index.svelte
vs3odd8k2#
从SvelteKit 1.0开始,路径应为括号中的目录,例如,对于
/blog/<slug>
,您将添加以下内容:然后在
src/routes/blog/[slug]/+page.js
中,您可以添加如下内容它会将它作为
data
属性返回给+page.svelte
,因此您可以编写如下内容:参考:https://kit.svelte.dev/docs/routing
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
如果您的博客有多个slug参数(/blog/2021/01/29/this-is-a-slug),您可以删除
[slug].svelte
并创建一个名为[...data].svelte
的文件,然后将加载方法更改为:不要忘记将data属性定义为一个对象。下面是一个 typescript 示例:
从那里使用
{data.slug}
等值快乐黑客