How do I make a component that is aware of the current url in Sapper with Svelte?
For people using SvelteKit, the given answers still apply. Take a look at the docs for the page store: https://kit.svelte.dev/docs/modules#$app-stores-page
EDIT: There were breaking changes in a new SvelteKit update. You still access the current url from the page store like this:
import { page } from '$app/stores';
$page.url.pathname
The trick is to create a reactive statement based on a value in the page store.
<!--
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>