I have a route with parameter defined:
$stateProvider
.state('item', {..})
.state('item.view', {
url: 'item/:id'
template: '...',
controller: '...'
});
While already in item.view state, I would like to switch the url with
$state.go('item.view', {id: 'someId'})
without reloading the page. I have tried:
$state.go('item.view', {id: 'someId'}, {notify: false});
$state.go('item.view', {id: 'someId'}, {notify: false, reload: false});
Both still cause the page to reload. I think i may be running into the issue described here: https://github.com/angular-ui/ui-router/issues/1758
That should be easy enough:
// It needs to be executed on main scope, hence $timeout
// If you are calling from a controller this is a must
// Otherwise it will 'lag' and update on next function call
$timeout(function() {
// As Sheryar Abbasi commented, the rest is simple.
// You should call $state.transitionTo with notify: false
// to stop the reload.
$state.transitionTo(
'item.view',
{
id: 4378 // New id/$stateParams go here
},
{
location: true, // This makes it update URL
inherit: true,
relative: $state.$current,
notify: false // This makes it not reload
}
);
});
This StackOverflow thread helped me figure out the $timeout.
Here is the official ui-router quick reference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With