When a state is clicked at first, the div that owns the \"ui-view\" attribute is replaced with the \"template\" of that state. However, when I click the same state again, it
Alternative syntax to go to a different view it would be
<a ui-sref="state1({reload: true})">State 1</a>
On the controller it would look like this.
$state.go('state1', {}, {reload: true});
Note: The second parameter of $state.go is $stateParams.
Like Philipp said, it is because this is the default behavior of ui-router, BUT if you would like to reload your controller each time you click on your link, you can actually use the ui-sref-opts attribute to force it, like this:
<a ui-sref="state1" ui-sref-opts="{reload: true}">State 1</a>
Found this tip here:
https://github.com/angular-ui/ui-router/commit/91a568454cc600aa4f34dedc8a80c9be1130b1c5
Hope it could help
just use below code
$stateProvider.
state('myPage', {
url: '/',
cache: false // add this line
Because that's how ui-router is designed.
The controller is only loaded when it isn't in the same state. ui-router will not rerun a controller, and not reevaluate a view template. Even when you use the same controller on multiple states and switch between those, the controller will not rerun.
If you want to run functionality when the a view changes you could listen for events, or even put an ng-click
on your a
element.