Front-end Hyperpolyglot
Inspired by hyperpolyglot.org, a comparison of similar features in popular JavaScript frameworks.
Any contributors who are more familiar with these frameworks would be massively appreciated. The source is on GitHub.
| React | Angular 2 | Angular 1 | Ember | Polymer | Vue | Riot | |
|---|---|---|---|---|---|---|---|
| Version used |
|
|
|
|
|
|
|
| Language used |
|
|
|
|
|
|
|
| Templating logic | |||||||
| React | Angular 2 | Angular 1 | Ember | Polymer | Vue | Riot | |
| Text interpolation |
|
|
|
|
|
|
|
| Transform interpolation |
|
|
|
|
|
|
|
| Transform with arguments |
|
|
|
|
|
|
|
| Bind text content |
|
|
|
|
|
|
|
| Bind href |
|
|
|
|
|
|
|
| Dangerous raw HTML output |
|
|
|
|
|
|
see notes |
| Bind attribute value |
|
|
|
|
|
|
|
| DOM add/remove |
|
|
|
|
|
|
|
| Repeat |
|
|
|
|
|
|
|
| Bind event handler |
|
|
|
|
|
|
|
| Components | |||||||
| React | Angular 2 | Angular 1 | Ember | Polymer | Vue | Riot | |
| Define component ES6 |
|
|
|
|
|
|
|
| Define component ES5 |
|
|
|
|
|
|
|
| Component communication | |||||||
| React | Angular 2 | Angular 1 | Ember | Polymer | Vue | Riot | |
| One-way data binding |
|
|
|
|
|
|
|
| String literal prop |
|
|
|
|
|
|
|
| Two-way binding (native) | not supported |
|
|
|
|
|
not supported |
| Two-way binding (components) | not supported |
|
|
|
|
|
not supported |
| One-time binding | not supported | not supported |
|
not supported | not supported |
|
not supported |
| Component internal state | |||||||
| React | Angular 2 | Angular 1 | Ember | Polymer | Vue | Riot | |
| Set initial state |
|
|
|
|
|
|
|
| Set state |
|
|
|
|
|
|
|
| Property validation | |||||||
| React | Angular 2 | Angular 1 | Ember | Polymer | Vue | Riot | |
| Prop validation key |
|
as types on @Input properties (below) | (no prop types) |
|
|
|
(no prop types) |
| Prop validate Number |
|
|
(no prop types) |
|
|
|
(no prop types) |
| Prop validate String |
|
|
(no prop types) |
|
|
|
(no prop types) |
| Prop validate Array |
|
|
(no prop types) |
|
|
|
(no prop types) |
| Prop validate Boolean |
|
|
(no prop types) |
|
|
|
(no prop types) |
| Prop validate Function |
|
|
(no prop types) |
|
not supported | not supported | (no prop types) |
| Prop validate Object |
|
|
(no prop types) |
|
|
|
(no prop types) |
| Prop validate union |
|
|
(no prop types) |
|
not supported |
|
(no prop types) |
| Component lifecycle methods | |||||||
| React | Angular 2 | Angular 1 | Ember | Polymer | Vue | Riot | |
| Initialized |
|
|
|
|
|
|
|
| DOM Ready |
|
|
|
|
|
|
|
| On prop change |
|
|
|
|
|
none |
|
| Component updated |
|
none | none |
|
none | none |
|
| Before destroy |
|
none | none |
|
|
|
|
| After destroy | none |
|
|
|
none | none |
|
Templating logic
Text interpolation
- Polymer: see Binding to text content.
Transform interpolation
React, Riot and Polymer don’t have the concept of ‘filters’ or ‘pipes’, but you can use a simple function to acheive the same result.
Transform with arguments
Bind text content
A way of binding the text content of an element via an attribute.
- Angular 1: See
ngBind. - Polymer: See Annotated attribute binding
Bind href
- Angular 2: See bind to the
hrefproperty. - Angular 1: See
ngHref. - Polymer: See Binding to native element attributes.
- Vue: See Directives > Arguments.
Dangerous raw HTML output
Please don’t use these in your programs. Filtering raw HTML on the server or in the browser will not protect you 100% against XSS. For a deeper look at the subject, please refer to the Google Browser Security Handbook (PDF download) and the book The Tangled Web: A Guide to Securing Modern Web Applications.
- React: See Dangerously Set innerHTML.
- Vue: See Raw HTML.
- Riot: Riot doesn’t directly support this, though you can set
innerHTMLusingthis.root.querySelector
Bind attribute value
- Angular 2: See Attribute, class, and style bindings
- Vue: See Attributes
DOM add/remove
- Angular 2: See Angular Cheat Sheet.
Repeat
- Angular 1: See
ngRepeat. - Polymer: See Template repeater (
dom-repeat).
Bind event handler
- Polymer: See Annotated event listener setup.
Components
Define component ES6
- Polymer: See Building web components using ES6 classes
- Vue: See gist: Vue.js + ES6
Define component ES5
- Polymer: See Building web components using ES6 classes
- Vue: See gist: Vue.js + ES6
Component communication
One-way data binding
- Polymer: The child component must also be set up to treat the property as read-only. Learn more about data binding in Polymer.
Two-way binding (native)
- Polymer: See Two-way binding to native elements.
Two-way binding (components)
- Polymer: See Property change notification and two-way binding.
One-time binding
When a property is passed down and never updated again.
- Angular 1: See One-time binding.
- Polymer: See Creating a One Time Binding in polymer-patterns.
Component internal state
Property validation
Prop validation key
The key in the component configuration object to define the expected type of a passed prop.
class Polyglot extends React.Component {
propTypes = {
myNumber: React.propTypes.number
}
}
- React: Learn more about
propTypesin React. - Angular 2: Learn more about Basic Types in TypeScript.
- Polymer: Learn more about declared properties in Polymer.
- Vue: Learn more about prop validation in Vue.
- Ember: Learn more about prop validation in Ember.
Prop validate union
- Angular 2: Advanced Types in TypeScript
Component lifecycle methods
Initialized
- React:
componentWillMount - Angular 1: See https://docs.angularjs.org/guide/component#component-based-application-architecture.
DOM Ready
- React:
componentDidMount
On prop change
- React:
willReceiveProps
Component updated
- React:
componentDidUpdate
Before destroy
- React:
componentWillUnmount
After destroy
- React has no
componentDidUnmountmethod. See ReactClass.js#L274.