Thank you very much for making the point I was about to.
I was very confused about the Web Components criticism, it seemed like the author didn't understand Web Components at all. My first thought was, "Why would you want to import your element into JavaScript, unless you're going to be doings something scripty with it?"
What you really want to do in a custom elements world, is embrace HTML, as opposed to JS, as the place to build your DOM. Instead of:
Bloop.renderComponent(Box(), document.body);
do:
Then I don't get this paragraph at all:
> Aren't you tired of having to query the DOM tree and manually manage the structure do
> create UIs? Web Components doesn't solve this at all, it just tries to encapsulate the
> work. The problem is that building apps is building components, so you inevitably are
> forced back into the manual DOM management to create your app-specific components (like
> how you constantly have to create directives in Angular). You also need to jump into
> JavaScript to configure and wire up any Web Components you used. It's a very messy
> abstraction, and fools you into desiring a pure HTML-based declarative way to write
> apps, which like wanting steak but eating liver.
What?
Of course the point of Web Components is to encapsulate the implementation DOM and the work of manipulating that DOM, and not prescribe how it's done, because you can do it in many ways: manually use DOM APIs, use templating like in Polymer, or even use React if you want.
The author then mixes criticisms of Angular with Web Components. Angular doesn't produce Web Components, has far too many complex concepts IMO (like the $scope.$apply example), and so far has rejected a Web Components centric approach (see their 2.0 design docs). You have to create many directives in Angular because it doesn't support standard 2-way data binding to properties out of the box: without directives you can only bind to attributes. Polymer, for instance, doesn't have those problems, and very complex widgets are built with templates.
And the complaint about needing JavaScript to configure Web Components seems to be completely without merit. Web Components imported with HTML imports are fully capable of registering themselves, so the import is all you need. Yes there's some JS under the hood, but you don't see it, and all of "Bloop" is JS anyway, so I'm really lost on this point.
React may be great, but the future is exactly in encapsulating away the work of building custom elements so that an application can be built of elements sourced from different vendors using whatever tools they want to implement them. I would have no problem using custom elements built with React, but at this point I am not interested in components that force me to use a particular framework. Trying to proclaim that all apps should be built with this or that awesome framework, is a quickly aging point of view.