gpt4 book ai didi

svelte - 如何使用Svelte使组件知道Sapper中的当前URL?

转载 作者:行者123 更新时间:2023-12-02 00:50:49 25 4
gpt4 key购买 nike

我有一个页面,该页面带有带有“季度”链接的导航栏。在“季度”链接下,当用户在/quarters路线上时,将显示一个季度列表,例如2019Q2等。URL为/quarters/2019q2

我想制作一个显示 super 链接的组件,如果当前URL与链接的href匹配,则该 super 链接将具有selected类。这是我能得到的最接近的东西:

<script>
import { afterUpdate } from 'svelte';
export let segment;
export let text = 'text here';
export let link;
let isCurrentPath = false;
console.log(segment, link, text);
afterUpdate(() => {
if (window.location.pathname.includes(link)) {
isCurrentPath = true;
debugger;
}
console.log('HL afterUpdate ', window.location);
});
</script>

<style>
/* omitted */
</style>

<a class:selected={segment && isCurrentPath} href={link}>{text}</a>

对于第一次加载,效果很好,但是当用户导航到其他数据页面时,选择不会更新。如何获得一些仅在客户端运行的代码?如果我访问 window之外的 afterUpdate对象,则会从服务器端代码中得到null ref错误。

预计到达时间:
  let isCurrentPath = false;
let path = typeof window === 'undefined' ? '' : window.location.pathname;
$: if (path) isCurrentPath = window.location.pathname.includes(link);

当用户单击数据链接之一时,该代码不会触发。也尝试过 onMount,没有任何积极的结果。

最佳答案

诀窍是根据页面存储中的值创建响应式(Reactive)语句。

<!--
This is used to have a link on the page that will show highlighted if the url meets the criteria.
You might want to adjust the logic on line 19.
usage:
<HighlightedLink bind:segment highlight="faq" rel="prefetch" link="/faq" text="FAQ" />
-->

<script>
import { stores } from '@sapper/app';
const { page } = stores();
export let highlight;
export let segment;
export let text = 'text here';
export let link;
export let target;
let highlightPath = false;
$: highlightPath =
$page.path && highlight && ($page.path.includes(highlight) || $page.path.includes(link));
</script>

<style>
.selected {
position: relative;
display: inline-block;
}
.selected::after {
position: absolute;
content: '';
width: calc(100% - 1em);
height: 2px;
background-color: rgb(255, 62, 0);
display: block;
bottom: -1px;
}
a {
padding-left: 10px;
}
</style>


<a class:selected={highlightPath} href={link}>{text}</a>

关于svelte - 如何使用Svelte使组件知道Sapper中的当前URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57813243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com