Angular 1 vs. Angular 2
Angular 1 and Angular 2 are philosophically different.
Angular 1 is at heart a DOM compiler. We write HTML, and the Angular compiler takes care of compiling it into a web application.
If we want extra behaviour, we extend the compiler by adding more directives.
The template drives our app. The HTML is our wiring.
Anyone with simple HTML skills can create a simple web application. It's an exercise in democracy.
Angular 1 gets bigger
Over time Angular 1 was used to create larger and larger applications. We started arranging our code into components. We repurposed directives to make them serve as web components, then used isolate scope to separate them one from another.
This humble, elegant, beautiful DOM compiler was twisted and repurposed into something it was never meant to be.
Angular 2 is the logical endpoint of this transformation. It is no longer a DOM compiler. Instead, it's an implementation of web components.
We create a tree of components. A root component (typically the app) contains child components (e.g. a header, sidebar, list of cats, etc.)
The HTML is no longer in the driving seat. In fact our HTML page may be almost blank. All the templates belong in the components.
Angular 1 attempted to democratise web application development, allowing anyone with simple HTML skills to build a web application at the cost of a complex core. Conversely, Angular 2 puts the power back into the hands of the coder, with the application of hardcore design patterns and rigour that will be beyond most HTML designers.
Both are acceptable approaches. I half wish they could co-exist under separate names.
Angular 2 is the successor of Angular 1, but it is not an iterative change. It is a philosophical groundswell. A new way of doing things.
Onwards and upwards.