Utilizarea elementelor Angular – De ce și cum? – Partea 1

Începem

Să începem prin a crea un nou proiect Angular în sistemul nostru. Pentru aceasta, asigurați-vă că aveți instalată cea mai recentă versiune de Angular CLI. Rulați următoarea comandă în terminalul dvs.:

$ npm install -g @angular/cli

După ce această instalare este completă, o putem folosi pentru a crea o nouă aplicație inițială în sistemul nostru, astfel:

$ ng new angular-app

Apoi vi se va cere să selectați caracteristicile suplimentare pe care doriți să le adăugați la proiectul dvs. Angular, lucruri precum rutarea și tipul de format al foii de stil. Selectați răspunsul implicit apăsând tasta Enter/Return.

CLI-ul instalează pachetele și dependențele Angular necesare într-un dosar numit angular-app. Puteți servi această aplicație pe browser executând următoarele comenzi:

$ cd angular-app
$ ng serve --open
// --open flag will open the browser for you

După cum puteți vedea, aplicația conține deja câteva lucruri pe care le putem afișa pe ecran. Dar nu avem nevoie de ele. Așa că întoarceți-vă la editorul de cod (eu ❤️ VS Code) și ștergeți tot ce se află în interiorul fișierului src/app/app.component.html și scrieți un singur element <h1>.

<h1>Welcome To Angular Elements!</h1>

Dacă aruncați o privire la structura fișierelor, veți vedea că fiecare componentă din angular este formată dintr-o multitudine de fișiere. Numai pentru componenta App, există un fișier .ts, .html, .css, și un fișier spec.ts care conține testele, precum și un fișier module.ts. Va exista, de asemenea, un fișier opțional routing.module.ts dacă ați ales să adăugați caracteristica de rutare la aplicație în timp ce o creați folosind CLI.

În loc să scriem toate aceste fișiere pentru componentele noastre, Angular CLI ne oferă o metodă prescurtată care va genera aceste fișiere pentru noi. Să folosim această metodă pentru a crea o componentă HelloWorld în sistemul nostru.

$ ng g c HelloWorld

Acestă singură comandă va crea un dosar numit hello-world în interiorul dosarului app. Dacă deschideți acest dosar, veți găsi aceste 4 fișiere în interiorul lui:

  • hello-world.component.css
  • hello-world.component.html
  • hello-world.component.spec.ts
  • hello-world.component.ts

Noi vom folosi doar fișierele .html și .ts. Există stegulețe suplimentare pe care le putem trece la comanda ng g c. Dar, pentru a păstra lucrurile simple și la obiect, nu le voi folosi. Consultați Angular Docs pentru a afla mai multe despre cum să folosiți această comandă.

În interiorul fișierului hello-world.component.ts, veți vedea că selector este setat la app-hello-world. Deci, dacă adăugați acest lucru la app.component.html astfel:

<h1>Welcome To Angular Elements</h1>
<app-hello-world></app-hello-world>

Atunci conținutul din hello-world.component.html va fi afișat în browser.

Configurarea noastră inițială este acum gata. Să începem cu modul de utilizare a elementelor Angular Elements.

Convert A Component Into Custom Element

În acest moment, avem o componentă simplă HelloWorld care imprimă pur și simplu un text pe ecran. Să aruncăm o privire la modul în care putem insera această componentă în aplicație într-un mod mai dinamic. Pentru a face acest lucru, să înlocuim app-hello-world cu un div și un button. Să adăugăm, de asemenea, ascultătorul click la button, astfel încât, atunci când cineva face clic pe buton, să poată fi afișată componenta HelloWorld. Acest lucru va fi gestionat de o funcție showMessage(). Așadar, mergeți la pagina app.component.html și faceți aceste modificări:

<h1>Welcome To Angular Elements</h1>
<div></div>
<button (click)="showMessage()">Display?</button>

Apoi trebuie să definim funcția showMessage() în fișierul app.component.ts. Aici vom folosi manipularea obișnuită a DOM pentru a obține div prin selectarea acestuia folosind id din hello. Apoi, vom aplica funcția innerHTML pentru a insera componenta app-hello-world astfel:

export class AppComponent {
showMessage() {
const hello = document.getElementById('hello');
hello.innerHTML = '<app-hello-world></app-hello-world>';
}
}

Puteți merge în browserul dvs. și face clic pe buton, dar vă spun de pe acum că nu se va întâmpla nimic. Dar, din nou, dacă mergeți la dev tools din browser și vă uitați acolo, veți vedea că este inserată componenta HelloWorld.

Motivul pentru care nu putem vedea componenta pe ecran este că Angular nu poate recunoaște tag-ul app-hello-world deoarece a fost inserat în șablon în mod dinamic. Angular are nevoie ca toate elementele să fie prezente în șablon sau trebuie să folosiți fabrica de componente dinamice pentru a instanția componenta în timpul execuției prin intermediul codului dumneavoastră.

Aici intră în joc Angular Elements. Utilizând Angular Element, tot ce trebuie să facem este să inserăm tag-ul în mod dinamic, iar Angular însuși va instanția componenta pentru noi. Să vedem, în sfârșit, cum să folosim această componentă în aplicația noastră. În primul rând, utilizați comanda ng add pentru a instala Angular Elements în aplicația noastră:

$ ng add @angular/elements

După ce ați instalat acest lucru, mergeți la app.module.ts și faceți următoarele modificări la @NgModule:

import {NgModule, Injector} from '@angular/core';
import {createCustomeElement} from '@angular/elements';
@NgModule({
declarations: ,
imports: ,
entryComponents: ,
providers: ,
bootstrap:
})

Apoi, în clasa AppModule, scrieți o funcție constructor creați o nouă instanță a createCustomElement și treceți-i HelloWorldComponent așa cum se arată mai jos:

export class AppModule {
constructor(injector: Injector) {
const custom = createCustomElement(HelloWorldComponent, {injector: injector});
}
}

Împreună cu componenta, trebuie să-i transmitem și injector. injector este un element pe care îl folosim pentru a rezolva dependențele. Odată cu aceasta, am creat o instanță a HelloWorldComponent ca element personalizat. Putem folosi apoi API-ul customElements pentru a defini tag-ul componentei ca fiind app-hello-world.

customElements.define('app-hello-world', custom);

Întoarceți-vă la fișierul hello-world.component.ts și eliminați/comentați selector din interiorul secțiunii @Component. În acest fel, Angular nu se va confunda și va ști să folosească elementul personalizat pe care tocmai l-am creat.

Rexecutați comanda ng serve --open pentru a vă asigura că Angular preia toate modificările pe care tocmai le-am făcut.

Există o mare probabilitate ca butonul să nu afișeze în continuare HelloWorldComponent. Acest lucru se poate datora faptului că Angular „nu reușește să construiască HTMLElementul”. Pentru a rezolva această problemă, instalați polyfills webcomponentjs:

$ yarn add @webcomponents/webcomponentsjs

Apoi, mergeți la fișierul polyfills.ts și importați următoarele:

import '@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js';

În sfârșit! Elementul nostru personalizat va fi afișat pe ecran atunci când vom face clic pe acel buton.

.