У меня есть страница, на которой есть панель навигации со ссылкой "Кварталы". Под ссылкой Quarters, когда пользователь находится на маршруте /quarters
, будет показан список кварталов, например, 2019Q2 и т. Д. URL-адрес будет /quarters/2019q2
.
Я хочу создать компонент, который показывает гиперссылку, которая будет иметь класс selected
, если текущий URL-адрес совпадает с href ссылки. Вот самое близкое, что я могу найти:
<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 из серверного кода.
ETA: Тоже пробовал:
let isCurrentPath = false;
let path = typeof window === 'undefined' ? '' : window.location.pathname;
$: if (path) isCurrentPath = window.location.pathname.includes(link);
Этот код не срабатывает, когда пользователь щелкает одну из ссылок на данные. Пробовал onMount
тоже без положительного результата.