Using web components in Angular 2
It is possible! In this playground, you can find a
my-tags custom element definition under
Its API is pretty simple:
my-tags-data="['first tag', 'second tag']"
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>
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.
This project was generated with angular-cli version 1.0.0-beta.14.
ng serve for a dev server. Navigate to
http://localhost:4200/. The app will automatically reload if you change any of the source files.
ng generate component component-name to generate a new component. You can also use
ng generate directive/pipe/service/class.
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
ng test to execute the unit tests via Karma.
Running end-to-end tests
ng e2e to execute the end-to-end tests via Protractor.
Before running the tests make sure you are serving the app via
Deploying to Github Pages
ng github-pages:deploy to deploy to Github Pages.
To get more help on the
ng --help or go check out the Angular-CLI README.