【问题标题】:Sveltekit: Styling active links with $page.pathSveltekit:使用 $page.path 设置活动链接的样式
【发布时间】:2022-01-06 20:19:47
【问题描述】:

我正在开发一个带有包含链接的 sidenav 的 sveltekit 应用程序。我无法让链接上的活动类样式正常工作。

链接是 NavLink.svelte 中的组件:

<script>
  import { page } from '$app/stores';
  import Icon from '$lib/Icon.svelte';
  export let title;
  export let href;
</script>

<a {href} class="link" class:active={$page.path == href}>
  <Icon {title} />
</a>

<style>
a.active {
  background-color: rgba(0,0,0,0.24);
</style>

这些链接用于SideNav.svelte

<script>
  import NavLink from '$lib/NavLink.svelte';
</script>

<nav class="container">
  <div id="links">
    <NavLink href="/link1" title="icon1" />
    <NavLink href="/link2" title="icon2" />
    <NavLink href="/link3" title="icon3" />
  </div>
</nav>

最后,sidenav 被加载到我的 __layout.svelte 中:

<SideNav />
<slot />
<Footer />

现在,当我单击其中一个 sidenav 链接时,我会被路由到正确的页面,但我的 NavLink 未使用 .active 类设置样式。但是,如果我检查链接,devtools 会向我显示:&lt;a class="link active:true"&gt;,其他链接有 active:false

所以看起来该功能正在运行,但我的活动样式未应用(背景颜色)。我错过了什么?

我尝试将 Active 类代码移动到 SideNav 组件而不是 NavLink 组件并观察到相同的行为。我想不通,所以我找到了一个很好的新方法。

在我的 NavLink.svelte 中:

<script>
  import {onMount} from "svelte";
  import Icon from '$lib/Icon.svelte';

  let currentPath;
  onMount(() => {
    currentPath = window.location.pathname;
  });
  export let title;
  export let href;
</script>

<a {href} class:active={currentPath == href}>
  <Icon {title} />
</a>

其余的代码都是一样的。现在我的链接得到了正确的样式。值得注意的是,他们只有&lt;a class="active"&gt; 而不是&lt;a class="active:true"&gt;。为什么它不能与其他方法一起使用?

【问题讨论】:

  • 我想通了....我想我只是忘了包括引号。哦。 NavLink 的工作代码(也包含子页面)是:&lt;a {href} class:active=""{$page.path.includes(href)}"&gt;

标签: css routes svelte sveltekit


【解决方案1】:

我想通了....我想我只是忘了加上引号。哦。 NavLink 的工作代码(也包含子页面)是:

&lt;a {href} class:active="{$page.path.includes(href)}"&gt;

【讨论】:

  • 我认为$page 的属性可能在发布后发生了变化。对我有用的是$page.url.pathname 而不是$page.path
猜你喜欢
  • 2020-08-03
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多