We have been developing a port of a Swing fat-client application in AngularJS for the last couple of months and I think it is worth recommending. As far as learning resources go, check out the official project site (and be sure to read the tutorial) and the mailing list (the authors are very helpful).
The good stuff:
- great testability
- the two-way data binding is a very powerful feature, and it can be extremely helpful once you “get it”
- IMO the AngularJS templates are much less brittle than using data- attributes or “special” CSS classes to mark elements that do something
- it greatly reduces the need for using jquery plugins, because implementing that functionality in AngularJS is very easy (stuff like trees, tabs, accordions, etc.)
The bad stuff:
- the learning curve seems pretty steep (I didn’t have much of a problem, but I’ve seen some people struggle with it)
- validations in AngularJS suck for the time being (a new implementation is on the way)
- not all libraries/jquery plugins play nicely with Angular and usually you have to wrap them
- the API is still being polished, so expect breaking changes (not a big problem with frequent releases and very good changelog, though)
- performance is OK up until several thousand bindings on a page – most of the time this is not a limitation, but there are cases when this could be a problem.
Some pointers (if you ever decide to learn AngularJS):
- some people really overuse widgets. In my experience, it’s much better to use HTML “partials” + services, and only use widgets sporadically.
- read source code of the library – it’s the best place to learn stuff about angular
- no DOM manipulation in services/controllers
- if you use css classes to bind to events, you are doing it wrong