[angularjs] Combating AngularJS executing controller twice

Just adding my case here as well:

I was using angular-ui-router with $state.go('new_state', {foo: "foo@bar"})

Once I added encodeURIComponent to the parameter, the problem was gone: $state.go('new_state', {foo: encodeURIComponent("foo@bar")}).

What happened? The character "@" in the parameter value is not allowed in URLs. As a consequence, angular-ui-router created my controller twice: during first creation it passed the original "foo@bar", during second creation it would pass the encoded version "foo%40bar". Once I explicitly encoded the parameter as shown above, the problem went away.