AngularJS is founded on the idea that declarative programming should be used to build user interfaces and wiring software components, while imperative programming excels at expressing business logic. The design of AngularJS is guided by several objectives:
decouple DOM manipulations from business logic. This improves the testability of the code;
consider testing an application as important as writing the application itself. The difficulty of the testing phase is greatly impacted by the way the code is structured
decoupling the client and server sides of an application. This allows software development on the client and server sides to progress in parallel, and enables reusability on either side.
guide developers throughout the construction of an application: from user interface design, through writing business logic, to testing the application
make easy tasks obvious and difficult tasks possible