AngularJS objective is to augment browser-based apps with MVC capability, in its quest to make development and testing easier. This tool is totally extensible and works nicely with other libraries, any feature can be replaced or modified to fit the unique workflow development and feature needs.
While imperative programming is great for expressing business logic, AngularJS is built around the thought that declarative programming should be used for creating User Interfaces and wiring app components.
Offers automatic sync of module and views as the framework adapts and improves traditional HTML to better serve dynamic content through two-way data-binding. You can register callbacks or watch model changes as AngularJS allows you to express the behaviour in a clean redable form without the regular boilerplate of improving the DOM.
AngularJS design objectives:
The development process can be splitted in two by decoupling the client side of an app from the server side and in the end allowing for both sides reuse.
Developers are now guided all the way from designing User's Interface part, through writting the business logic, to app testing.
Apps testing is as important as app writing so testing difficulty is greatly affected by the way the code is structures.
Angular offers traditional server-side services, like view-dependent controllers, to client-side web apps using dependency injection.
So in consequence much of the burden on the backend is reduced, leading to much slimer web apps, as they follows the MVC pattern of software engineering encouraging loose coupling between presentation, data, and logic components.