I just noticed that when I do Route.go() in Meteor, it keeps all of the previous page's template handlers/events/render JS code.
For example, on the previous page before Route.go(), I had a setInterval(...) running at every x seconds.
After Route.go(), this setInterval continued to fire, however because the required elements were no longer there, it just kept generating errors.
Is this by design? How can I route and start fresh?
Note: this is true for clicking a link as well, since technically that's a route too (if the link was created as a route)
Using Router.go is not analogous to clicking a hyperlink or issuing a server-side redirect.
It's common to expect Route.go to act like a non-bound hyperlink (i.e. to physically issue a new GET request), or issue a server-side 301, but that's not how Iron Router works.
It will handle the route within your current loaded window environment, typically making use of HTML5 pushState to swap out the URL but handle the route internal to Meteor.
This means any existing setIntervals or other "global" events will continue to run unless you stop the handler explicitly.