I've found that using something like this._router.navigate( ['Login', { a: 'b&c=d' }] ); will create a URL like /login?a=b&c=d and when navigate happens, a is set to 'b&c=d' and b is null. When you reload, a is set to b and c is d. This is inconsistent.
Also, certain other characters such as / for example, can truncate the rest of the query string. this._router.navigate( ['Login', { a: 'x/x', b: 'hello' }] ); will result in /login?a=x/x&b=hello with the params being read correctly, but when reloaded, it gets cut down to /login?a=x