Playground project to use web components in ng2 without wrappers
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
e2e
src
.gitignore
README.md
angular-cli.json
karma.conf.js
package.json
protractor.conf.js
tslint.json

README.md

ng2-webcomp-playground

Using web components in Angular 2

It is possible! In this playground, you can find a my-tags custom element definition under src/shared/wc/my-tags.wc.ts. Its API is pretty simple:

  • (input) my-tags-data="['first tag', 'second tag']"
  • (output) onchange=doSomething()

In order to be used in Angular 2, you must use the following syntax in your template:

<my-tags [attr.my-tags-data]="items1String" (change)="onChange($event)"></my-tags>

IMPORTANT items1String must be a string. Why that? Custom elements read HTML attributes that are put on the tag and they are read as strings. Cool thing: ES6 class syntax enables us to declare getters/setters that makes this workaround easy to implement.

Have you noticed how nice the (change) event binding is! The my-tags element dispatches a custom event change event and Angular 2 natively binds to it within the template (have a look at the generated .js files).

How is that possible?

Custom elements and custom built-in elements specification is a work in progress at W3C. The support is not full even in most modern browsers. However, webcomponentsjs provides us with polyfills. Just use them.

After that, we must wait until web components can actually be created, injected into the DOM and used. Thus, we wait for the event WebComponentsReady before bootstrapping our Angular app.

Contributing

This project was generated with angular-cli version 1.0.0-beta.14.

Development server

Run ng serve for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

Code scaffolding

Run ng generate component component-name to generate a new component. You can also use ng generate directive/pipe/service/class.

Build

Run ng build to build the project. The build artifacts will be stored in the dist/ directory. Use the -prod flag for a production build.

Running unit tests

Run ng test to execute the unit tests via Karma.

Running end-to-end tests

Run ng e2e to execute the end-to-end tests via Protractor. Before running the tests make sure you are serving the app via ng serve.

Deploying to Github Pages

Run ng github-pages:deploy to deploy to Github Pages.

Further help

To get more help on the angular-cli use ng --help or go check out the Angular-CLI README.