如何使用 Svelte Routify 创建路由链接
How to Create Route Links with Svelte Routify
我正在学习如何使用 Routify 连接一些路由和 links。我需要帮助。
在 Routify 文档中说:
“可以用多种不同的方式处理链接。这可能是最简单的方式”。
来自:https://routify.dev/guide/navigation
然后给出这个例子:
<script>
import {isActive, url} from '@sveltech/routify'
const links =
[
['./index', 'Home'], //add index if you don't want siblings to be considered children
['./blog', 'Blog'],
['./about', 'About'],
['./contact', 'Contact']
]
</script>
<style>
.active {font-weight: bold}
</style>
<ul>
{#each links as [path, name]}
<!-- Svelte magic. If isActive is true, the "active" class is applied. -->
<li class:active={$isActive(path)}>
<a href={$url(path)}>
{name}
</a>
</li>
{/each}
</ul>
不幸的是,它没有给出任何关于如何将其连接到您的应用程序的说明(如果它确实太复杂了,我无法弄清楚)。
我正在使用 Routify 模板,我已将上面的代码复制到以下目录中:
pages/_components/Navigation.svelte
然后我尝试将其导入 pages/index.svelte 中:
pages/index.svelte
<script>
import Navigation from './_components/Navigation.svelte';
</script>
<div>
<Navigation/>
</div>
link 出现在页面顶部。当我单击它们时,端点遵循以下模式:
http://localhost:5000/index/home
http://localhost:5000/index/blog
http://localhost:5000/index/about
http://localhost:5000/index/contact
在我的 /pages 目录中,我的页面与代码中列出的页面相匹配,例如:
/pages/Home.svelte
当我单击 link 时,我的浏览器停留在同一页面上,并没有嵌入与 link 关联的页面。另外,我的浏览器开发工具说:
Uncaught Error: Route could not be found for "/index/home".
at urlToRoute (urlToRoute.js:15)
at updatePage (navigator.js:13)
at pushstate (navigator.js:60)
at History.history.<computed> [as pushState] (navigator.js:51)
我需要做什么才能看到相应的页面,为什么它们的中间目录名为“index”?如何去掉 url 中的“索引”一词?
更新
好的,我已经在所有页面上列出了导航并且处于半工作状态。
我已将 Navigation 代码(如下)导入 pages/_layout.svelte.
代码如下:
pages/_layout.svelte
<script>
import Navigation from './_components/Navigation.svelte';
</script>
<!--TABS-->
<Navigation/>
pages/_components/Navigation.svelte
<script>
import {isActive, url} from '@sveltech/routify'
const links =
[
['./index', 'Home'], //add index if you don't want siblings to be considered children
['./form', 'Form']
]
</script>
<style>
.active {font-weight: bold}
</style>
<ul>
{#each links as [path, name]}
<!-- Svelte magic. If isActive is true, the "active" class is applied. -->
<li class:active={$isActive(path)}>
<a href={$url(path)}>
{name}
</a>
</li>
{/each}
</ul>
导航link出现了,但现在的问题是选中的页面内容没有出现。
在下图中,正在呈现表单端点。表单组件工作 HTML 但 HTML 没有出现在页面上。
我的开发人员工具也收到一条警告,内容为:“收到意外插槽“默认”
您不应将导航组件导入 index.svelte
文件,而应导入同一目录中的 _layout.svelte
文件。
他们在 TV Shows App 中显示了设置,虽然他们没有像您尝试的那样显示在导航文件中导入的上述代码,但如果将具有上述代码的组件导入到_layout 文件,因为 url 帮助程序解析相对于使用它的 page/layout 的路径。
将其导入索引文件会创建相对于索引文件的路径,这就是您在所有路径中看到索引的原因。
更新:
响应需要渲染每个页面的内容。这是使用 _layout 文件中的插槽完成的,在您的示例中它看起来像这样:
<Navigation/>
<main>
<slot />
</main>
我正在学习如何使用 Routify 连接一些路由和 links。我需要帮助。
在 Routify 文档中说:
“可以用多种不同的方式处理链接。这可能是最简单的方式”。
来自:https://routify.dev/guide/navigation
然后给出这个例子:
<script>
import {isActive, url} from '@sveltech/routify'
const links =
[
['./index', 'Home'], //add index if you don't want siblings to be considered children
['./blog', 'Blog'],
['./about', 'About'],
['./contact', 'Contact']
]
</script>
<style>
.active {font-weight: bold}
</style>
<ul>
{#each links as [path, name]}
<!-- Svelte magic. If isActive is true, the "active" class is applied. -->
<li class:active={$isActive(path)}>
<a href={$url(path)}>
{name}
</a>
</li>
{/each}
</ul>
不幸的是,它没有给出任何关于如何将其连接到您的应用程序的说明(如果它确实太复杂了,我无法弄清楚)。
我正在使用 Routify 模板,我已将上面的代码复制到以下目录中:
pages/_components/Navigation.svelte
然后我尝试将其导入 pages/index.svelte 中:
pages/index.svelte
<script>
import Navigation from './_components/Navigation.svelte';
</script>
<div>
<Navigation/>
</div>
link 出现在页面顶部。当我单击它们时,端点遵循以下模式:
http://localhost:5000/index/home
http://localhost:5000/index/blog
http://localhost:5000/index/about
http://localhost:5000/index/contact
在我的 /pages 目录中,我的页面与代码中列出的页面相匹配,例如:
/pages/Home.svelte
当我单击 link 时,我的浏览器停留在同一页面上,并没有嵌入与 link 关联的页面。另外,我的浏览器开发工具说:
Uncaught Error: Route could not be found for "/index/home".
at urlToRoute (urlToRoute.js:15)
at updatePage (navigator.js:13)
at pushstate (navigator.js:60)
at History.history.<computed> [as pushState] (navigator.js:51)
我需要做什么才能看到相应的页面,为什么它们的中间目录名为“index”?如何去掉 url 中的“索引”一词?
更新
好的,我已经在所有页面上列出了导航并且处于半工作状态。
我已将 Navigation 代码(如下)导入 pages/_layout.svelte.
代码如下:
pages/_layout.svelte
<script>
import Navigation from './_components/Navigation.svelte';
</script>
<!--TABS-->
<Navigation/>
pages/_components/Navigation.svelte
<script>
import {isActive, url} from '@sveltech/routify'
const links =
[
['./index', 'Home'], //add index if you don't want siblings to be considered children
['./form', 'Form']
]
</script>
<style>
.active {font-weight: bold}
</style>
<ul>
{#each links as [path, name]}
<!-- Svelte magic. If isActive is true, the "active" class is applied. -->
<li class:active={$isActive(path)}>
<a href={$url(path)}>
{name}
</a>
</li>
{/each}
</ul>
导航link出现了,但现在的问题是选中的页面内容没有出现。
在下图中,正在呈现表单端点。表单组件工作 HTML 但 HTML 没有出现在页面上。
我的开发人员工具也收到一条警告,内容为:“收到意外插槽“默认”
您不应将导航组件导入 index.svelte
文件,而应导入同一目录中的 _layout.svelte
文件。
他们在 TV Shows App 中显示了设置,虽然他们没有像您尝试的那样显示在导航文件中导入的上述代码,但如果将具有上述代码的组件导入到_layout 文件,因为 url 帮助程序解析相对于使用它的 page/layout 的路径。
将其导入索引文件会创建相对于索引文件的路径,这就是您在所有路径中看到索引的原因。
更新:
响应需要渲染每个页面的内容。这是使用 _layout 文件中的插槽完成的,在您的示例中它看起来像这样:
<Navigation/>
<main>
<slot />
</main>