Description
What problem is this solving
I want to update the location URL without triggering scrollBehavior
.
I need to trigger scrollBehavior
only on the page refresh, or when I go to the route from other one to scroll the page to the selected item. (I select an item by a click on it then I add its ID to the location URL).
- Allow router.replace without triggering scrollBehavior vue-router#2072
- Ability to prevent
scrollBehavior
on a particular<router-link>
vue-router#2921 - ability to check push vs replace in navigation guard vue-router#1620
Proposed solution
Add a passive
option for router.push
/router.replace
to skip scrollBehavior
and guards, for example, if there is no transition to another route.
router.replace({ params: { id: item.name }, passive: true });
As you can see in this example, I do not use neither name
, or path
. I'm still on the same route ("/items/:id?"
) after using replace
. Using of hash
(/items#1
), or searchParams
(/items?id=1
) for storing a data on the same route have this issue too.
Or add any way to attach a meta object (for example, {passive: true, foo: "bar"}
) to check it in scrollBehavior
and guard functions.
A simple if (to.state.passive) { return; }
in scrollBehavior
will be acceptable option too.
Describe alternatives you've considered
Yeah, I can write a workaround, but I (and not only me) would like to see this simple and expected option from the box.