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
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.