UI Router actually supports a reload parameter, but that’s only respected if all that is changed were query parameters. When the path changes, it always reloads the view. What we want here, is to be able to specify, based on a couple of parameters, whether the view should be reloaded. Then there’s notify, which is used to broadcast both $stateChangeStart and $stateChangeSuccess.
Bending UI Router until it breaks: parallel states, view recycling & more
Dario Gieselaar
56

We reload the views (template/controller) only when the state which defined the view is itself reloaded.

We reload a state if any parameter for that state (or a parent state) has changed. However, if a parent state has no parameter changes, then the parent state (and parent state’s views) are not reloaded.

The “reload” argument to $state.go is used to force a reload, even if parameters have not changed.

Reloading a state involves re-fetching resolves based on parameter values, then re-populating any ui-views that should be updated, which creates and invokes a new controller instance for that view.