Update 28/1/2016: This post was about Angular 1, it was published well before Angular 2 was even near ready for beta release. A bit has changed since then, but my thoughts on Angular in this post have not.
For quite a long time developers have been using AngularJS. Coming at a time when the alternatives were the likes of Backbone.js (while powerful in its own right), which just didn’t tick all of the boxes a modern web application needs ticked, we thought we had reached developer nirvana.
We got two-way data binding, controllers, directives and templating syntax. For a good while things were peachy, the sun was shining and everyone was sipping from the golden chalice of AngularJS kool-aid. We put it on t-shirts, wrote books, online training courses, bumper stickers and they sold baby, they sold.
While AngularJS is far from dead, its eventual demise is coming. A slew of core problems with the framework, more notably dirty-checking and transclusion was enough to rally the detractors to write blog posts about why you shouldn’t use AngularJS. They were all right in their own special way, but some were missing the point.
Not too long ago there was no viable alternative to AngularJS. I am not just talking about feature-set or community participation, I am talking about the lack of actual backing by anyone other than a few neck-beards in their basements contributing to their beloved open source project.
This is where AngularJS succeeded. The everyday developer loved it, people were using it with WordPress and pretty much anything they could stuff Angular into. And then the enterprise started using it, all of a sudden you were seeing listings for local council and government jobs that listed AngularJS as a desired skill.
But why? If other choices were out there, why did Angular succeed? Was it because it was the first one out of the gate to offer almost everything you would find in a server-side framework or was it the fact it was backed by Google? In part it was both. But there was one other aspect of Angular that made it appealing.
I think it is safe to say that many took comfort in the fact that Google was behind Angular and if Google was behind it, then it must be good. This kind of trust in Google surprises me given their poor track record sunsetting a whole lot of products with their backing, more notably Google Reader.
It was Lego (AngularJS) vs Meccano (every other framework).
While the disdain for Angular was strong, the love that people had for it remained the strongest. For every hate-piece on Angular, there was a retort that would follow soon after.
The fighters and lovers were on equal footing, kind of like a war. One side spews propaganda and the other side does their best to dispel it: the PHP language is all too familiar with this ugly side of development.
“This ain’t a scene, it’s a god damn arms race” – Fall Out Boy.
When things go wrong
A little while ago talk of Angular 2.0 came about. Instead of it being a natural evolution of the framework, it was revealed that it would be a complete rewrite. The backwards compatibility, transclusion and most hated of them all: dirty-checking would either be removed or rewritten in a more efficient manner in 2.0.
But the Angular team did something that no open source project in a highly competitive battlefield should do: they announced a new version of their highly popular framework that would have no backwards compatibility with the 1.x branch and that there would be no upgrade path whatsoever.
When the Angular team announced this, you could practically hear a record skip right across the Internet. The concern started relatively contained with the Hacker News comments section and then it escaped, soon everyone was writing blog posts defending the new syntax and lack of backwards compatibility, but many were decrying such a move.
Not only did they announce there would be no backwards compatibility or upgrade path, they also revealed a controversial new syntax for decorating your HTML markup.
Why were people so angry? The Angular team announced they would be addressing all of the shortcomings in version 2.0, that transclusion you hate so much? Gone. Dirty-checking? Completely rewritten to be more memory efficient and use browser object-observe when supported.
Even though at its core 2.0 would arguably be a much better successor to Angular 1.x, removing a large chunk of backwards compatibility and starting from a clean slate, for a version 2.0 the Angular team shocked by changing too much, too soon.
It all comes down to the fact that it is a universally accepted downside of Angular that it has a steep learning curve. The basics of Angular not so much, but the more nitty gritty aspects of the framework were arguably harder to learn due to confusing documentation and confusing blog posts that would go against some of the things the documentation would tell you to do.
You could say that AngularJS 2.0 was a message: every developer that had spent their time learning the framework were being told mostly everything they have learned would be invalidated in possibly 12 months time when 2.0 is released.
It’s like learning French only to discover that in 12 months time that all French speaking nations would be switching to Italian, sure there might be some similarities but it is a completely new language you have to learn.
The biggest controversial aspect of Angular 2.0 was not just the lack of upgrade path, it was the new syntax which looked ugly. There were concerns it would also throw HTML validation (some people still run their sites through the W3C validator surprisingly).
It would take a little bit of time after for the Angular team to sit back and realise they had made a big mistake. Their stubbornness had already caused Rob Eisenberg (of Durandal fame) to abandon the Angular 2.0 team and build a successor to Durandal in the form of Aurelia. While the Angular team might not have realised it, losing Rob was actually a big blow to the project.
Now we are seeing Angular 2.0 components being ported back to 1.4 and while the 1.x branch will continue to be supported for a little while, the damage has been done. Even though there will now be an upgrade path (sort of), it is too little, too late.
Death is near
Having said that: not everybody will abandon AngularJS and support for the 1.x branch will continue for some time. However, once 2.0 lands, it would make very little sense to use the older and more troublesome 1.x branch.
While AngularJS 1.x will remain popular for some time yet, make no mistake React.js alone in its relatively short lifespan has taken an axe to Angular’s market share quite significantly and we will see those effects ten fold when Angular 2.0 is released.
This coupled with other frameworks like Aurelia and EmberJS which has seen a massive uptake by developers, Angular is not the only kid in the playground anymore.
Angular is not going anywhere in the interim, but I think there is now enough competition in the space that simply being backed by Google is not enough to convince developers to stay and trust their decisions are the right ones.
Interesting rant but some of the claims just aren’t backed by facts.
I’m not sure who these developers you know are that are abandoning Angular in droves (maybe it’s based on reading a few blog posts?) but I can assure you working with enterprise and line of business web applications across many large organizations, Angular is very much alive and well and in high demand.
It is still trending forward. People are concerned about 2.0 but don’t realize Angular announced help to transition from 1.4. The developer preview is already available and it turns out if you used good practices it is not as much of an impact to port forward (i.e. if you are using POJO and controller as, rather than relying on $scope, etc.).
Always good to get a good rant/vent out there though!
I don’t know about the future of Angular 2.0 (it’s not AngularJS any more, BTW) because there are so many uncertainness with regards to how Angular 2.0 will compete with Aurelia, ReactJS and other alternatives.
The main thing that confuses me is that if I were to start a brand new project today, I would have no idea what framework to choose.
Aurelia is not production ready. ReactJS is not full MVC. Starting with AngularJS 1.4 will just be pointless given today’s knowledge.
When I started my last project almost a year ago, AngularJS looked like the best horse to bet on. Today – there is no best horse out there.
How does this constitute the death of Angular? (Unless your point is just that this will be the death of Angular 1.X)
I wish developers would do this more often. A lot of code out there is simply poorly put together. To continue the usage and support of a broken system doesn’t fit with the dynamic nature of the web. If you’re not willing to adopt new technologies as a developer, you’re not going to make it very far.
Trust me, if I wanted to rant about Angular, I could have quite easily. This is a relatively tame post on the subject of Angular 2.0.
I know the enterprise still use Angular. I am currently contracting on an enterprise project using Angular as we speak, I know of its limitations and shortcomings, so they don’t affect me in the slightest. People already using Angular 1.x are not going to just abandon it. I am not saying that people will just decide to start from scratch because as we both know in the enterprise/corporate sectors, that luxury is not afforded on development teams.
More and more developers are trying other frameworks and libraries. The most popular choice I am currently seeing is React.js and for good reason if you have used it. React isn’t even a framework, but it can achieve the kind of things that Angular can only dream of. Not to mention it supports an isomorphic workflow, so you can build applications without having to worry about if search engines can index your site or not (without needing to use a third party service or Node module).
I acknowledge that moving from 1.4 to 2.0 isn’t exactly that difficult. This is in part to the outrage of the community, you have to realise that they initially said there would be no upgrade path at all. But then they backtracked when they realised this was a massive mistake that would cost them dearly. Now components are being back-ported to 1.4 which is great, I think they managed to save face, but it really shows just how clueless the team are when it comes to doing things in the communities best interests.
Like I say, people are not going to just stop using Angular all of a sudden. But surely you cannot deny people are not looking at it with the same rose coloured glasses that they once were.
The focus is more-so on the contents of the article and less about the title. It was nothing more than something I made up to summarise the direction I think Angular 2.0 is going. It won’t truly die to the point where people stop using it, but unlike Angular 1.x, it isn’t the only solid choice out there. People have choice, more choice than ever.
The landscape is changing for the better. I think when Angular first arrived on the scene, it served a purpose and fulfilled needs that weren’t being filled by any other framework or library. But now ES6 and ES7 are bringing features like modules, promises, classes and my favourite: object observe to the browser. Frameworks will eventually be nothing more than convenience wrappers around native methods as opposed to the current state of things where frameworks serve as more polyfills with a router component.
I think 2.0 is the death of Angular’s dominance as the de-facto framework of choice for the masses. I don’t think it is completely the core teams fault for changing up the syntax, I think the faster pace of ECMAScript releases is to also be partly blamed. But then you have the mismanagement of the project to blame as well.
I also agree that more projects should have the guts to start from scratch where needed. I applaud the Angular team for doing what they did, but I think they didn’t consult and listen to enough people in the community about what they really wanted in 2.0.
The very fact they lost Rob Eisenberg because they ignored his ideas to me summarises perfectly what will kill Angular 2.0’s adoption than anything else: arrogance. During the design phase they should have listened, when people publicly decried the new syntax they should have listened. Instead they chose to fight. Will that mean they die by the sword and go down with the ship? Who knows.
I definitely think there is some merit to some of the common complaints about Angular. However, I think it’s also fair to offer up a modest shoutout to the Angular team for at least attempting to address some of the pain points. I think the framework has come a long way since the beginning.
I’ve been using Angular on large applications for a while now and there are some obvious signs that Angular, in its early form, was not ready for large enterprise applications. I am mostly referring to design flaws in the framework that affect performance.
My biggest gripe with Angular is that they decided to make two way binding an opt out rather than an opt in. Reversing this decision would have provided an instant performance boost out of the box. Developers now have to carefully examine their bindings, one by one, to determine if they can opt out of the watchers instead of opting in where it’s really needed.
KnockoutJS did a better job here by forcing you to be more explicit. As far as dirty checking vs observables – I guess I can go both ways on this….
The next flaw I would call out is Angular DI. Unfortunately it does not support lazy loading – in fact you have to add a third party library on your own to add support for lazy loading.
DurandalJS did a better job here by using RequireJS for DI, which supports AMD out of the box and lets you load resources on demand – rather than as one large load upfront.
Granted the short comings I mention here are not a concern for most applications, but still… It’s also fair to mention that lazy loading is coming to Angular in version 1.5.
My final complaint is the wealth of unnecessary proprietary concepts like factory, service, value, constant etc. While I can appreciate that there are use cases where each one may shine – limiting it to a single choice (e.g. factory) would have made things clearer and easier to navigate.
In regards to the radical shift in Angular 2.0….
Despite the upcoming migration pain, I still support the move. I think the outcry against Angular 2.0 is somewhat exaggerated and a sign that people depend on their frameworks too much.
My general advice is to always limit dependencies on specific frameworks to cases where direct measurable value is added. Sticking to plain JS will ensure that your code stays portable. I always try to stick to this philosophy since the JS framework situation is so fluid at the moment.
In Angular specifically, the best way is probably to keep everything in services since it only requires a thin Angular wrapper – needed for DI.
I have a few examples on my blog where I demonstrate how this approach will let you easily port code between different frameworks. In my examples I am porting code between Angular and React.
I still consider myself an overall fan of Angular, but I am not sure which framework will eventually dominate. To hedge my bets I try to stay current with most popular frameworks. If nothing else it gives me something to do and blog about 🙂
I think one of the main reasons why Rob left Angular is because they wanted to keep the digest loop rather than use a next gen system like observables/microtask queue. Efficiently giving priority to UI interaction events is something that desktop applications have had for years. Without this, I think Angular 2.0 should be DOA. Serious developers will either stick with Angular 1 for now or look at something like Aurelia if it can provide typing, solid documentation and support.
That’s very interesting. It sounds like maybe you are in a small team? I think going with what you know best certainly makes sense! I can’t agree it’s more complicated because I’ve witnessed firthand the positive impact it has on larger teams with complex projects, but as with all things there is a right and wrong approach. I certainly see a lot of articles that overcomplicate it and of course without centralized, clear documentation that compounds things, but fortunately there are teams who have connected with the right resources and practices to enable them to build, at scale, effectively with large teams on complex projects.
I would be right there with you if we were experiencing the same issues with maintainability and confusion, but the consensus on the teams I’ve worked with is that it is much easier to understand, maintain, and implement features than using jQuery or home-rolled libraries.
Again, not disagreeing. It always makes sense to go with what you are comfortable with and what works for you, and not to force a team into a framework if they’re not receiving value. Just wanted to share for the sake of others reading this that our experiences were much different and more beneficial.
What a strange attitude.
You fear that Angular is changing and you might have to learn something new, so you recommend changing your framework and learning something new.
Not sure who your comment was in response to, but if you are referring to the article itself, I think you misunderstand the intent. The point isn’t to say that Angular has changed and you should learn something new, because that would make no sense.
Angular 2 has gone in a direction that definitely simplifies core concepts from Angular 1 (removing transclusion and confusing controller syntax). But that one part I just can’t get onboard with is the syntax. To me syntax is everything. Sure someone will probably make some kind of addon that allows you to write template syntax in a different way, but that isn’t the point.
The way the Angular team initially approached legacy upgrading I thought was really bad as well. They basically came out and said, we’re not offering an upgrade path, so deal with it. It was only after the uproar that the team decided to offer an upgrade path.
Maybe in 2010 when nothing was standardised and ES2015 (formerly ES6) was still years away from being finalised, Angular 2 might have felt less out-of-place or behind. But it’s almost 2016 and everyone is moving towards standardised concepts because the support is there and when it is not, we have transpilers.
Hi, thank you for this article, I spent myself a lot of time learning Angular and introduce it in the company where I work…so I know what you are talking about.
Just a remark, React IS NOT a substitution or equivalent of Angular, to be more specific, React may be compared to Angular Directives.
After spending 4 hours trying to figure out how to pre-populate my form fields coming from a server-side database while not breaking angular, I have come to the conclusion that it can’t die fast enough.
No problem. Yes, technically React and Angular are two different things. When React first debuted it was only ever intended to help compose dynamic UI into the DOM. It was never intended to be used as a framework. However, if you look around the modern React workflow is something like this:
React > React Router > Flux > Node.js
Put those all together and you get the same functionality as Angular, except some of the less crappier things about Angular like directives, etc. React is not technically a framework, but it is commonly used as one to the point where I would say it is a fair comparison to make in 2015.
AngularJS it is actually a complicated way of doing simple things. Very hard to get my head around, big learning curve, confusing API, poor documentation and slow template binding and a very opinionated framework. Not sure why it became that popular even if it is of a pretty poor quality??!
Current status of Angular: 40-50 commiters every month, 400 commits per month. These figures are stable.
In comparison Aurelia, because it is mentioned here as an alternative several times: 1-3 commiters, 15 commits per month.
Of course, these are stats of development rather than usage, but at least, such figures aren’t guesswork. There is no framework with similar scope even close to Angular in development activity, mailinglist activity, Google Trends, book releases on Amazon, whatever not-guesswork metric you use.
Six months on and Google Trends shows Angular still continuing to grow. Angular will eventually die (as did Backbone and Underscore), but it seems not quite yet.
Based on my recent deep experience on angular 2, I am sure it will not being accepted by many of experienced developers. Do you remember 10 years ago we had to handle a button onclick by adding an onclick attribute to it’s tag? And do you remember when jQuery came around we were very happy because it separated our code from our markup and made everything easy. Now look at what Angular 2 is:
a very ugly code for handling a simple input change! We have to manipulate our markup for every logic that we want to add to our code! Angular means returning to 10 years ago’s coding style and even worse. Markup and code should be mixed at a very complex and ugly way! Easy problems are now hard to solve, even for a 12 years experienced developer. Miss you jQuery.
Feeling I dodged a bullet not learning angular.
1. Why change from JS? the typescript is too much
2. too unstable. I will just wait it out.
this post is outdated
I have become very skeptical of future of Angular these days myself. And btw, that’s exactly why I googled and came across this article. I got my hands wet on AngularJS 1.x and I thought it was good, reassured by the fact that it is from the giant google. Then I learned about Angular 2.0 and went over the tutorials at angular.io. Yes it is completely different from AnguarJS 1.x. and it seems the learning curve of Angular 2 is bigger than AngularJS 1.x. I agree with Dwayne: just because it is backed by Google, doesn’t mean it is good and yes, Google has discarded too many of their products. Google reader is one, and also think about Wave, and where is google+? Anyway, I guess I am gonna have to wait until things really settle down before I will jump onto it.
Not many developers are going to invest any time in learning Angular 2.0.
“Fool me once shame on you, fool me twice shame on me.”
This entire thread is turning into an echo chamber. I’ve been doing several talks, tutorials, etc. regarding Angular 2.0 and the reality is a LOT of developers are interested and investing their time in learning it. It’s OK to say you don’t like it or you don’t see the value, but I don’t think anyone is in a position to make broad statements like “not many developers are going to invest in it” when the trends on Twitter, GitHub, videos, conferences, etc. state otherwise. Here’s a Google trendline, and interest is definitely not waning: https://www.google.com/trends/explore#q=angular%202&date=today%2012-m&cmpt=q&tz=Etc%2FGMT%2B5
is based on searches. I landed here searching for “Best Alternative to AngularJS 2”. Why? I’m looking for something that wouldn’t change drastically. Sometimes big leaps are good and sometimes they are not. And big corps “Almost” control everything. When they decide this is the way and it is. When they decide to drop something. We can’t do anything about it. Big corps have the advertising and marketing power.
Tony, technology is about change. Believe it or not, most of the major frameworks like Angular don’t change “just because.” It’s not a big, evil corporation laughing because so many people are “stuck” on their software and now they are going to ruin everything. Change is a response to the market and in technology, the market is changing weekly. Saying you are looking for something that won’t change is basically saying “I want to be stuck in legacy code and not keep pace with my competitors.” Can you honestly list one major technology or framework that “hasn’t changed much” over the past 5 years, which is the window we are talking about for Angular 1 shifting to Angular 2?
As we approach March 2016, I think we can conclude that Angular’s crown has slipped. React has gained enough marketshare to become the ‘default’ choice for new projects, and NG2 does not offer enough of a paradigm shift to justify getting to grips with its inevitable idiosyncracies.
To put it another way, Google does not define ‘success’ for NG2 in the way we’d define it, and that’s why we have to be very careful about becoming (emotionally?) invested in it – because if we misunderstand Angular’s purpose, we are guaranteeing ourselves disappointment.
I just finished the angular2 tour of heroes tutorial to see how things were evolving, and i just can’t understand what they are trying to do.
The code is a mess… the task is simple, list something, click, show the result another view, and they created a maze to get it done, at the end of tutorial you have like, 11 TS files, you have to do a lot of steps to accomplish something that would be easy in any framework, jquery, angular, react or any other, and you HAVE to do those steps, or everything will look like a mess.
I have been using angular on almost all my projects on the last year, one of them is a HUGE project, and it worked better than i expected!
I was really excited when they announced angular 2, but today, i’m not that confident anymore.
I think people are missing the point, all these JS libs are suitable for different types of systems. You wouldn’t use React.js for a heavy data entry web application, and you probably wouldn’t bother with angular if you were building a brochure-ware site. It is the amateurs who are clinging to one or the other and using them for everything they touch.
Angular 2 sits in the gap between React and Angular 1.x, they tried to please both markets and probably ended up pleasing neither. I wouldn’t count on Angular 2.0 actually outliving 1.x, Google may have misjudged the market. I don’t think they will overhaul React in their niche, and I can’t see people ditching 1.x to move to 2.0 and having to write masses of hacks to pin it together as a data/UI abstraction (which was where Angular 1.x excelled). Besides Googles decision to try and force TypeScript down peoples throats is going to put off JS developers as it amounts to having one hand tied behind your back. I know plain JS documentation is coming, but they have shown their hand by forming it for TypeScript output and they will be judged by it.
Had to agree with certain aspects. The ‘skip’ part is really evident in my organization, where none of the core developers are interested to learn the 2.0 aspects, while they are still making/breaking web stuff with 1.3 version. To put it simple, ‘Angular sucks’. Sooner or later it will meet the fate of Picasa, Orkut ..
hello! I just look the future of the angular.js
Been working on Angular since two years, and i just completed Angular2 Hero tutorial..What… whats going on there !! I cant get my head over it.. whts the kind of syntax you are forcing on us?. No one in our team like the Angular2.. and the discussion is going on.. should we migrate to angular2 or react.. anyway.. both would be almost complete rewrite.
Thanks to everyone who shared their experiences. I was holding on not to introduce AngularJS. Start ups can’t afford overhauls and throwing open source stuff after adoption. I had very bad experiences with GWT, Gadgets, etc. Young Developers, customers, managent push us because of hype…but later …??? Thanks again…I feel I am sane…there are some at least who do not clap just because it is Apple and Google…..
Here is a fun experiment regarding the “death of angular”. Search indeed.com for “emberjs”, then search “angular”.
Add React to that comparison and you have a winner when it comes to current demand.
I love a good rant, and this is a good one. 🙂
My company is using Angular 2. Not sure if that is good or not, since I am in C#/.NET land.
AngularJS actually sucks IMHO. I have came to this article when typing “AngularJS sucks” in the browser address bar.
Now, Angular4 is released. Please try to use Angular2 and Angular4. Then you can feel how it is comfortable and clean and smart. Now Igor and his team are using beautiful design patterns. Angular is not dying.
I recently participated in a project using Angular 2. I had used AngularJS (Angular 1.x) and actually liked it. I found the Angular 2 learning curve somewhat challenging, the documentation wasn’t all that clear (although I must admit it has improved). I’d say that the new Angular is cleaner and smarter, you just have to get used to it. AngularJS may be dying but not so the case with Angular.
The time for Angular is over. I never understood why people think that a an infinite while-loop which updates some values is “magic”.
Please try out this easy-to-use Angular alternative named JJRE.
Agular version X. is coming they say. Ha ha ha ha… Gsus after every failing version they Dump another version across the fence. I work with ASP.NET Mvc what is wrong with that? I am still try to thinking about that. Tried to find a use case for Angular. SPA’s? You want a desktop app in a browser? Good luck with that! A browser is a modern version of a terminal, nothing more nothing less.
I hate it when nerds get their soft little hands on a easy to understand and useful framework. They nerd it all up! Make it more complicated, bloated, and cryptic. It’s what happens when you don’t have anything else to do but sit behind a computer. I want to use a framework that is easy to understand and gets the project done as fast as possible. I saw it happen with Adobe and ActionScript 3.0. ActionScript 1.0-2.0 use to be easy to understand and anyone; designers, artist, and tinkers could ‘make things happen.’ See-ya-later Angular!