AngularJS became very popular due to its easy two-way data binding, MVC architecture, built-in module system, dependency injection, and routing package. Initially built as a hobby project by Misko Hevery in 2009, the framework started to take off shortly after its 2012 1.0 release. It quickly became the most popular SPA framework for front-end development.
In 2012, the JavaScript ecosystem was a very different place. Knockout, Backbone, Ember, Angular, and perhaps a few others were all vying for JS framework market share. ES6 wasn’t a thing yet. NPM wasn’t used for front end code. Libraries and frameworks weren’t mature. Steve Sanderson, of KnockoutJS fame, gave a great assessment of the front-end landscape at the time following the “Throne of JS” conference.
AngularJS solved a lot of problems for web developers out of the box. For simple SPAs, it hit a sweet spot of productivity. Tooling started to grow, custom directive libraries were released, and the platform grew extremely quickly.
However, as developers started to build professional, rich, full-grade applications on the framework with large teams over long periods of time, its limitations began to show. Two-way data binding, watchers, $scope variables, state management, confusing and repetitive abstractions like factory/service, and many other issues inhibited AngularJS in production.
At the peak of Angular’s popularity, in 2014, the team behind Angular announced that they would be creating a completely new incompatible framework. They would confusingly, perhaps even deceivingly, label this new framework Angular 2.
Reference: https://medium.com/@chriscordle/why-angular-2-4-is-too-little-too-late-ea86d7fa0bae