Recs.
Updated
Specs
Pros
Pro Easy and straightforward data-binding
Data bindings are done on the DOM, which allows you to easily sync data between various parts of the DOM in a very succint matter.
<body ng-app>
<span>Insert your name:</span>
<input type="text" ng-model="user.name" />
<h3>Echo: {{user.name}}</h3>
</body>
This snippet shows how the model attribute "name" is easily bound across different parts of the DOM without having to set up any extra boilerplate.
Pro Allows developers to express UI declaratively
Because the UI organization and properties are directly on the HTML, it makes it easier to change the presentation and rearrange components without having to deal with the control logic of the page.
This declarative nature makes it easier for designers to work directly on the HTML to make layout changes.
Pro Extends HTML using directives
Angular uses the existing HTML structure and builds on top of it instead of requiring you to learn a new templating language. Because it's just vanilla HTML, it is more familiar, and easier for beginners to learn. Directives let Angular know which HTML elements are under its control, and how to use them.
Being directly on the HTML it's more transparent what's going on, and it's possible to get a good idea of what the page is doing just by looking at the template.
Also, it makes embedding possible, as you could have an angular app within an existing site so you don't have to rewrite everything at once.
Pro Provides dependency injection
With dependency injection, you can load in extra javascript and new functionality just when you need it.
This is particularly helpful with testing as you can swap out services for test services.
It also means in single page apps you can load dependencies only as you need them instead of loading them up all up at the start.
Pro Safe future
Because Angular is supported by Google, we know it isn't going to fizzle out any time soon. Google is using the framework themselves including with huge projects such as DoubleClick.
Cons
Con Very internally complex
Angular is a very big codebase, and while it does handle most of what you'd need to do out of the box, if you do find the need to extend the base functionality, or look into the internals, or debug deep into the framework, it is much harder to comprehend than other frameworks.
Because the internals are so integrated with each other, debugging requires you to have a good grasp on many layers of abstraction at once.
Con Difficult to integrate into 3rd party services
Interacting with Angular components is difficult from other services or libraries outside of Angular. It is verbose and non-intuitive to bridge the gap, making it hard to work with if you are trying to upgrade from a legacy code base, or rely heavily on external APIs.
Con Writing directives is hard
Because so much of the magic goes on under the hood it's hard to extend Angular to do new things by writing new directives.
Con The documentation does not cover every aspect of the framework
Some developers think Angular has insufficient documentation that doesn’t do a good enough job of covering all aspects of this framework. That may be true, but since the community is still experimenting and there is nothing like an official set of ‘rules’, those who rigidly follow the system find it difficult to work with.
It should also be noted that documentation has improved with the contribution of Angular community.
Con Two-way data binding is often considered an anti-pattern
Two-way data-binding means that a HTML element in the view and an Angular model are binded, and when one of them is changed so is the other. One-way data-binding for example does not change the model when the HTML element is changed.
This is a rather controversial subject and many developers consider two-way data binding an anti-pattern and something that is useless in complex applications because it's very easy to create complex situations by using it and being unable to debug them easily or understand what's happening by just looking at the code.
Recommendations
Comments
Flagged Pros + Cons
Con Lack of decent official tutorials
Because Angular is such a huge monolithic framework, wrapping your head around it isn't easy. The API is huge, and not organized very well, meaning much of your time developing will probably be spent figuring out how it all works.