KnockoutJS for me, its such a nice solution for the presentation view management. It also has some neat extension libraries, including external template engine, which loads rendering templates and caches them on demand.
I use Jquery dependent SammyJS for navigation management.
I have shell that manages loading view model/ views based on Sammy's intercepts...pretty happy, though I hear good things about angularJS, but it came along just a little too late for me to properly evaluate.
Second that. The recently updated Visual Studio Tools come with new MVC templates for single page apps using Durandal, which is based on Knockout and Sammy. There is also a node.js package and skeleton of Durandal. Durandal adds the missing parts to knockout and Sammy to make it compete in this field. If you add the "durandal" search term to the knockout chart line, it climbs above ember, deservedly.
I basically wrote a custom "durandal" to plug the missing infrastructure gap, however I must investigate durandal itself, i am sure it will add a little more sugar than my effort.
Basically I built a dal access layer based on promises for delegating to from my viewmodels. I also built a view transition manager into my app shell also, part of my core SPA framework.
I also added a bespoke option piece for hydrating routes.
I have this api for my SPA called /public/routing and user/{id}/routing which returns the json config for API's for either anonymous or authenticated users. it is key on the Sammy Hash intercepts and provides me with the glue, i.e. what external view template should I transition too, what view Model should I load for this, also what API and Verbs are supported for the users role! its great, because my site admin can added routes on the fly, and its totally modular from a dev point of view, so if a new route can not be found, I just load the Empty View Template Placeholder (in development environment of course ).