MATERIAŁY NA WARSZTAT #3 2020-11-26
Dzisiaj poznamy sposoby na przesyłanie danych pomiędzy komponentami.
Tworzenie aplikacji
ng new pizza-z-pieca ? Would you like to add Angular routing? Yes ? Which stylesheet format would you like to use? SCSS [ https://sass-lang.com/documentation/syntax#scss ] cd pizza-z-pieca code .
Komponent piec do pizzy
cd src/app ng g c piec
Plik: app.component.html
<app-piec></app-piec> <app-piec></app-piec>
Plik: piec.component.ts
numerPieca = 1; nazwaPieca = 'Główny';
Plik: piec.component.html
<p>Piec {{ nazwaPieca }} numer {{ numerPieca }} działa!</p>
Plik: app.component.ts
pieceWPizzeri = ['Pierwszy', 'Drugi'];
Plik: app.component.html
<app-piec *ngFor="let piec of pieceWPizzeri"></app-piec>
Plik: piec.component.ts
@Input() numerPieca = 1; @Input() nazwaPieca = 'Główny';
Plik: app.component.html
<app-piec *ngFor="let piec of pieceWPizzeri" [nazwaPieca]="piec"></app-piec>
<app-piec *ngFor="let piec of pieceWPizzeri; let i = index" [nazwaPieca]="piec" [numerPieca]="i"> </app-piec>
<app-piec *ngFor="let piec of pieceWPizzeri; let i = index" [nazwaPieca]="piec" [numerPieca]="i+1"> </app-piec>
Plik: piec.component.ts
@Input() numerPieca: number; @Input() nazwaPieca: string;
Komponent zamówienia
ng g c zamowienia
Plik: piec.component.html
<h2>Piec {{ nazwaPieca }} numer {{ numerPieca }} działa!</h2> <app-zamowienia></app-zamowienia>
Dodawanie nowego zamówienia
Plik: zamowienia.component.html
<button (click)="onNoweZamowienie()">Nowe zamówienie</button> <p>{{ zamowienie }}</p>
Plik: zamowienia.component.ts
zamowienie: string; constructor() { } ngOnInit(): void { } onNoweZamowienie() { this.zamowienie = "Capriciosa"; }
Plik: zamowienia.component.html
<input type="text" (input)="onWpisywanieZamowienia($event)"> <button (click)="onNoweZamowienie()">Nowe zamówienie</button> <p>{{ zamowienie }}</p>
Plik: zamowienia.component.ts
onWpisywanieZamowienia(event: Event) { this.zamowienie = (<HTMLInputElement>event.target).value; }
Formularz zamówienia
Plik: app.module.ts
imports: [ BrowserModule, AppRoutingModule, FormsModule, ],
Plik: zamowienia.component.html
<input type="text" [(ngModel)]="zamowienie"> <button (click)="onNoweZamowienie()">Nowe zamówienie</button> <p>{{ zamowienie }}</p>
Plik: zamowienia.component.ts
onNoweZamowienie() { } // onWpisywanieZamowienia(event: Event) { // this.zamowienie = (<HTMLInputElement>event.target).value; // }
Wiele zamówień w jednym piecu
ng g c zamowienie
Plik: zamowienia.component.html
<input type="text" [(ngModel)]="zamowienie"> <button (click)="onNoweZamowienie()">Nowe zamówienie</button> <app-zamowienie *ngFor="let zamowienie of zamowienia"></app-zamowienie>
Plik: zamowienia.component.ts
zamowienie = ''; zamowienia = []; constructor() { } ngOnInit(): void { } onNoweZamowienie() { this.zamowienia.push(this.zamowienie); this.zamowienie = ''; }
Plik: zamowienie.component.ts
@Input() zamowienie: string; @Input() id: number;
Plik: zamowienie.component.html
<p>Piecze się {{ zamowienie }} nr {{ id + 1 }}</p>
Plik: zamowienia.component.html
<app-zamowienie *ngFor="let zamowienie of zamowienia; let i = index" [zamowienie]="zamowienie" [id]="i"></app-zamowienie>
Pizza upieczona!
zamowienie.component.ts
upieczona = false; constructor() { setTimeout(() => { this.upieczona = true; }, 10000) }
zamowienie.component.html
<p>Piecze się {{ zamowienie }} nr {{ id + 1 }}</p> <p>{{ upieczona }}</p>
zamowienie.component.scss
.dodobioru { background-color: green; }
zamowienie.component.html
<p [ngClass]="{dodobioru: upieczona === true}">Piecze się {{ zamowienie }} nr {{ id + 1 }}</p>
Pizza z pieca!
zamowienie.component.html
<p [ngClass]="{dodobioru: upieczona === true}"> Piecze się {{ zamowienie }} nr {{ id + 1 }} <button (click)="wyjacZPieca()">Wyjąć z pieca</button> </p>
zamowienie.component.ts
@Output() wyjmujePizzeEvent = new EventEmitter<number>();
wyjacZPieca() { this.wyjmujePizzeEvent.emit(this.id); }
zamowienia.component.html
<app-zamowienie *ngFor="let zamowienie of zamowienia; let i = index" [zamowienie]="zamowienie" [id]="i" (wyjmujePizzeEvent)="wyjmijZpieca($event)"></app-zamowienie>
zamowienia.component.ts
wyjmijZpieca(pizzaNr: number) { this.zamowienia.splice(pizzaNr, 1); }
Dlaczego można wyjąć nie upieczoną pizzę?
zamowienie.component.html
<button (click)="wyjacZPieca()" [disabled]="!upieczona">Wyjąć z pieca</button>