ember-angle-bracket-invocation-polyfill
This addon provides a polyfill for angle bracket invocation syntax as described in
RFC 311. It's the same components you
know and love, no longer surrounded by mustaches. \o/
Installation
ember install ember-angle-bracket-invocation-polyfill
Usage
The best usage guide is the RFC itself,
but here are a few examples of "before"/"after" to whet your appetite:
Before:
{{site-header user=this.user class=(if this.user.isAdmin "admin")}}
{{#super-select selected=this.user.country as |s|}}
{{#each this.availableCountries as |country|}}
{{#s.option value=country}}{{country.name}}{{/s.option}}
{{/each}}
{{/super-select}}
After:
<SiteHeader @user={{this.user}} class={{if this.user.isAdmin "admin"}} />
<SuperSelect @selected={{this.user.country}} as |Option|>
{{#each this.availableCountries as |country|}}
<Option @value={{country}}>{{country.name}}</Option>
{{/each}}
</SuperSelect>
Supported Features
- Supports invoking components via angle brackets using TitleCase
<FooBar></FooBar>
- Supports invoking components via angle brackets with self-closing syntax
<FooBar />
- Supports invoking components via angle brackets using paths
<some.thing></some.thing>
- Supports invoking components via angle brackets using yielded block params
{{#with (component 'foo-bar') as |Foo|}}
<Foo></Foo>
{{/with}}
- Supports passing arguments into invoked components with
@
prefix
<FooBar @title={{whateverHere}}></FooBar>
- Supports passing attributes to be added to the root element of the component without
@
prefix
<FooBar data-test-foo-bar></FooBar>
- Supports using
has-block
inside the invoked component to determine if a block was provided
<FooBar /> {{! checking `has-block` inside would be `false`}}
<FooBar></FooBar> {{! checking `has-block` inside would be `true`}}
- Supports yielding block params from inside the invoked component
<FooBar as |qux|>{{qux}}</FooBar>
- Supports passing
...attributes
into another angle bracket invocation
<FooBar ...attributes>
- Supports passing
...attributes
into a non-component element
<div ...attributes></div>
- Supports passing
...attributes
into tagless components - Completely innert when running Ember 3.4 or higher
- Supports Ember 2.12, 2.16, 2.18, 3.1, 3.2, 3.3
- Test all the features listed above 😘
Limitations
Not all features described in the RFC are polyfilled.
This addon does not support the following features:
- Single word component names
Contributing
Installation
git clone <repository-url>
cd ember-angle-bracket-invocation-polyfill
yarn install
Linting
yarn lint:js
yarn lint:js --fix
Running tests
ember test
– Runs the test suite on the current Ember versionember test --server
– Runs the test suite in "watch mode"ember try:each
– Runs the test suite against multiple Ember versions
Running the dummy application
For more information on using ember-cli, visit https://ember-cli.com/.
License
This project is licensed under the MIT License.