Code Monkey home page Code Monkey logo

Comments (10)

davidhorak avatar davidhorak commented on June 4, 2024

@BennyHinrichs that would be too rigid, so rather, please see the latest version, 1.0.12, there is new Link component prop called "disabled' - https://github.com/spaceavocado/svelte-router#router-link-component

If set to true, the navigation actions is disabled on the link and the underlying element has set "disabled" css class.

from svelte-router.

BennyHinrichs avatar BennyHinrichs commented on June 4, 2024

Can you explain how that would be used here so that no navigation happens when you click "Don't Navigate":

<RouterLink to="/">
  <div>Navigate</div>
  <div class="no-navigation">Don't Navigate</div>
</RouterLink>

from svelte-router.

davidhorak avatar davidhorak commented on June 4, 2024

Now I see your point better.

This would just disable the whole element:

<RouterLink to="/" disabled={true}>
  <div>Navigate</div>
  <div class="no-navigation">Don't Navigate</div>
</RouterLink>

In your case, it would be better to create your own link component. The bare minimum is to just leverage $router.routeURL(to) to get the URL in the case of location object, and than call $router.push(to) based on your logic.

from svelte-router.

BennyHinrichs avatar BennyHinrichs commented on June 4, 2024

Sorry, I meant how can I make it so clicking "Navigate" follows the link, but clicking "Don't Navigate" does nothing? Won't your example make it so no navigation happens on both divs?

from svelte-router.

davidhorak avatar davidhorak commented on June 4, 2024

Updated the comment above.

from svelte-router.

davidhorak avatar davidhorak commented on June 4, 2024

Or you can wrap the link into your own DOM structure, e.g.:

<div class="link">
   <RouterLink to="/" disabled={true}>Navigate</RouterLink>
   <div class="no-navigation">Don't Navigate</div>
</div>

from svelte-router.

BennyHinrichs avatar BennyHinrichs commented on June 4, 2024

I might look into making my own component. Consider the following case where you have an interactive element in the middle of the click area:

<RouterLink to="/route">
  <div>Click to Navigate!</div>

  <label class="no-navigation">
    <input type="checkbox">
    Click Without Navigating!
  </label>

  <div>Click to Navigate!</div>
</RouterLink>

Okay, after some thought, what about adding a disabledClass property to router link component? Then navigate(event) in link.svelte would be expanded with

if (disabledClass && event.target.closest('.' + disabledClass) {
  return;
}

from svelte-router.

davidhorak avatar davidhorak commented on June 4, 2024

I see what you want to achieve but it is too specific to be considered as general usage - there might be plenty of cases like that, so the custom component seems to be the suitable, project specific approach here.

Quick tip, you prevent the event triggering like so:

<script>
  import Link from './Link.svelte';
  function noop() {}
</script>

<Link>
  <div>Click to Navigate!</div>
  <label class="no-navigation" on:click|preventDefault|stopPropagation={noop}>
    Click Without Navigating!
  </label>
</Link>

Link.svelte:

<script>
  function click() {
    console.log('click');
  }
</script>

<a href="/" on:click|preventDefault={click}>
  <slot></slot>
</a>

from svelte-router.

BennyHinrichs avatar BennyHinrichs commented on June 4, 2024

Wow, I'm dumb. I totally forgot that stopPropagation exists 😄 That actually solves the whole problem still using RouterLink. Thanks for indulging me.

from svelte-router.

davidhorak avatar davidhorak commented on June 4, 2024

@BennyHinrichs no worries, glad to help.

from svelte-router.

Related Issues (16)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.