Comments (10)
@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.
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.
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.
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.
Updated the comment above.
from svelte-router.
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.
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.
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.
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.
@BennyHinrichs no worries, glad to help.
from svelte-router.
Related Issues (16)
- Transitions support HOT 6
- RouterLink does not output attributes passed HOT 3
- Store Router not updating HOT 2
- whats is the Status of this project HOT 4
- $router.push() and $route.replace() do not update the destination component route prop when the source and destination component are the same HOT 2
- Query parameters are not encoded
- Upon reloading, the route is broken, I am not able to find a solution to this. Is there any way to redirect the user to proper route on reload? Even the routes in the example(webpack) are broken if reloaded.? HOT 1
- Optional parameters in the URL cause crash in isWholeNumber
- Callbacks: "to, from" versus "from, to" HOT 3
- TypeError: de is undefined when selecting a link produced by <RouterLink> HOT 1
- Event Listener for URL Changes? HOT 13
- Svelte:Head doesn't update, when switch between pages HOT 5
- Support for Analytics like Matomo HOT 7
- RouterLink invalid route parameters HOT 5
- Home absolute path HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from svelte-router.