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>

Tags:

Svelte

Sapper