在angular项目中使用web-component ----How to use Web Components with Angular
原文: https://medium.com/@jorgecasar/how-to-use-web-components-with-angular-41412f0bced8
-------------------------------------------------------------
Custom Elements Everywhere, Angular passes all the tests so it is a good candidate to implement the use of Web Components.
jorgecasar/tutorial-webcomponents-angular repository.
ng new tutorial-webcomponents-angular and open it in our favorite editor.
src/app/app.module.ts:
export class AppModule { }
chore(app): add custom elements schema · jorgecasar/tutorial-webcomponents-angular@8c60bf2
How to use Web Components with Angular
github.com
Adding polyfills
webcomponents polyfills.
First, install the dependency using NPM:
npm install --save @webcomponents/webcomponentsjs
angular.json file:
}
index.html.
And finally we must wait for the dependencies to load to start our app and thus make sure that the Web Components are ready to be used:
if (window.WebComponents.ready) {
// Web Components are ready
bootstrapModule();
} else {
// Wait for polyfills to load
window.addEventListener('WebComponentsReady', bootstrapModule);
}
chore(app): load polyfills · jorgecasar/tutorial-webcomponents-angular@6bc76a1
How to use Web Components with Angular
github.com
ES5 Support
<head>, just before the webcomponents script included before.
</div>
With this we have our app ready to include Web Components, so let’s create one and check its compatibility.
Creating a Web Component
Justin Fagnani.
npm i --save @polymer/lit-element
wc-mood:
customElements.define('wc-mood', WebComponentsMood);
app.component.ts:
import './wc-mood/wc-mood';
And we use it in the html of our component:
<my-element mood=”awesome”></my-element>
feat(wc-mood): create web component · jorgecasar/tutorial-webcomponents-angular@bfd3b51
How to use Web Components with Angular
github.com
Testing the interaction with the Web Component
Now that we have the Web Component working, let’s try the interaction with it.
Set properties from Angular
randomMood method that changes that property:
this.moods[index];
}
}
And we make the corresponding change in the html to establish the property and we make that by clicking on the Angular logo we establish another value to the property:
feat(wc-mood): set property to Web Component · jorgecasar/tutorial-webcomponents-angular@ff75f50
How to use Web Components with Angular
github.com
Listen to events from Angular
To complete the interaction, we will launch an event from the component to listen to it from Angular.
In the Web Component we will notify the changes in the properties sending the event:
this.dispatchEvent(
new CustomEvent(prop + '-changed', {
detail: { value: _changedProps[prop] }
})
);
}
}
mood. We do this because it is the most logical from my point of view and also both Angular and Polymer use this pattern, so we can begin to standardize it ????
Once we have made this change we can already hear the event from Angular. To verify that angular receives the event we will animate the Angular logo for 1 second using the following method:
this.isChanged = false, 1000);
}
animated class to the image:
feat(wc-mood): dispatch event from Web Component to Angular ·…
How to use Web Components with Angular
github.com
Two-way data binding
To crown things off and simplify the way to establish and listen to the event we can use the double data binding:
moodChanged method when the value changes:
this.moodChanged();
}
}
feat(wc-mood): support two-way data binding · jorgecasar/tutorial-webcomponents-angular@4ae8b4a
How to use Web Components with Angular
github.com
Demo
For you to see the operation here I leave the demo:
https://tutorial-webcomponents-angular.firebaseapp.com/