Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change url by changing $stateParams without reloading page

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

like image 218
ltfishie Avatar asked May 17 '15 02:05

ltfishie


1 Answers

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.

like image 164
Djuka Avatar answered Sep 29 '22 14:09

Djuka