laboratorium 13 dyrektywy strukturalne w angularlaboratorium 13 dyrektywy strukturalne w angular...

3
Laboratorium 13 Dyrektywy strukturalne w Angular Zadanie 0 – wstępny projekt Pobieramy sobie projekt lab13app.zip , rozpakowujemy, instalujemy pakiety, kompilujemy, otwieramy w przeglądarce i przeglądamy zawartość aplikacji. Zadanie 1 – dyrektywa ngSwitch W pliku mock-products.ts mamy listę 12 produktów księgarni internetowej. Są 4 typy produktów: ksiazka, gra, muzyka (jakiś album z muzyką) i film. Każdy typ produktu ma inne pola w obiekcie. Korzystając z dyrektywy *ngSwitch proszę wyświetlić informacje o każdym produkcie zależnie od jego typu. Można to zrobić albo od razu w jakiejś liście, wierszach tabeli itp., albo wyświetlać odpowiednie informacje po wybranku odpowiedniego towaru, np. po jego indeksie w tablicy. Oba sposoby rozwiązania poniżej. Doskonały wygląd nie jest ważny. Ważne jest użycie *ngSwitch. Warto sobie do tego zadania utworzyć osobny komponent, np. products (klasa ProductsComponent). Może być lista wszystkich produktów: albo szczegóły wybranego po indeksie elementu: Zadanie 2 – wykorzystanie elementu <ng-container> Korzystając z zawartości pliku mock-films.ts, proszę wyświetlić w kontrolce select listę filmów wyprodukowanych w XXI wieku. Jak komuś się chce, to można dodać funkcjonalność wyboru filmu z listy i wyświetlania jego szczegółów. Warto sobie do tego zadania utworzyć osobny komponent, np. films (klasa FilmsComponent). Wynik może wyglądać np. tak:

Upload: others

Post on 09-Oct-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laboratorium 13 Dyrektywy strukturalne w AngularLaboratorium 13 Dyrektywy strukturalne w Angular Zadanie 0 – wstępny projekt Pobieramy sobie projekt lab13app.zip, rozpakowujemy,

Laboratorium 13Dyrektywy strukturalne w Angular

Zadanie 0 – wstępny projektPobieramy sobie projekt lab13app.zip, rozpakowujemy, instalujemy pakiety, kompilujemy, otwieramyw przeglądarce i przeglądamy zawartość aplikacji.

Zadanie 1 – dyrektywa ngSwitchW pliku mock-products.ts mamy listę 12 produktów księgarni internetowej. Są 4 typy produktów:ksiazka, gra, muzyka (jakiś album z muzyką) i film. Każdy typ produktu ma inne pola w obiekcie.Korzystając z dyrektywy *ngSwitch proszę wyświetlić informacje o każdym produkcie zależnie odjego typu. Można to zrobić albo od razu w jakiejś liście, wierszach tabeli itp., albo wyświetlaćodpowiednie informacje po wybranku odpowiedniego towaru, np. po jego indeksie w tablicy. Obasposoby rozwiązania poniżej. Doskonały wygląd nie jest ważny. Ważne jest użycie *ngSwitch. Wartosobie do tego zadania utworzyć osobny komponent, np. products (klasa ProductsComponent).

Może być lista wszystkich produktów:

albo szczegóły wybranego po indeksie elementu:

Zadanie 2 – wykorzystanie elementu <ng-container>Korzystając z zawartości pliku mock-films.ts, proszę wyświetlić w kontrolce select listę filmówwyprodukowanych w XXI wieku. Jak komuś się chce, to można dodać funkcjonalność wyboru filmuz listy i wyświetlania jego szczegółów. Warto sobie do tego zadania utworzyć osobny komponent, np.films (klasa FilmsComponent). Wynik może wyglądać np. tak:

Page 2: Laboratorium 13 Dyrektywy strukturalne w AngularLaboratorium 13 Dyrektywy strukturalne w Angular Zadanie 0 – wstępny projekt Pobieramy sobie projekt lab13app.zip, rozpakowujemy,

Tworzenie dyrektywDyrektywy tworzymy poleceniem ng generate directive (w skrócie ng g d ), np. polecenie:

ng generate directive abcutworzy nam dyrektywę o nazwie AbcDirective (Angular sam doda słowo Directive), która będziedostępna poprzez selektor appAbc (samodzielnie tworzone dyrektywy mają domyślnie początek appw odróżnieniu od dyrektyw wbudowanych, które zaczynają się od liter ng).

Zadanie 3 – własna dyrektywa strukturalnaProszę utworzyć dyrektywę cytat (klasa CytatDirective), która będzie wyświetlać w danym elemenciedrzewa DOM (dowolny znacznik HTML) jeden losowy cytat z listy. Można wykorzystać następującątablicę w TypeScript:

cytaty: Array<string> = [ "Żaden wiatr nie jest pomyślny temu, kto nie wie, do którego portu płynie.", "Być szczęśliwym - tego trzeba się nauczyć.", "Nie należy lekceważyć drobnostek, bo od nich zależy doskonałość.", "Są dwie drogi, aby przeżyć życie. Jedna to żyć tak, jakby nic nie było cudem. Druga to żyć tak, jakby cudem było wszystko.", "Szczęście może przyjść przypadkowo, ale o rozum musimy postarać się sami.", "To, co zdobyliśmy z największym trudem, najbardziej kochamy.", "Matematyka jest alfabetem, za pomocą którego Bóg opisał wszechświat." ];

Przykładowy kod testujący działanie (w pliku app.component.html):<h1 *appCytat>Nagłówek H1</h1><h3 *appCytat>Nagłówek H3</h3><p *appCytat>Zwykly paragraf</p>

Oczekiwany wynik w przeglądarce:

Page 3: Laboratorium 13 Dyrektywy strukturalne w AngularLaboratorium 13 Dyrektywy strukturalne w Angular Zadanie 0 – wstępny projekt Pobieramy sobie projekt lab13app.zip, rozpakowujemy,

Zadanie 4 – własna dyrektywa strukturalna z parametramiProszę utworzyć dyrektywę cytat2 (klasa Cytat2Directive), która będzie wyświetlać w danymelemencie drzewa DOM (dowolny znacznik HTML) kilka losowych cytatów. Liczbę wyświetlanychcytatów i kolor ich tła określamy w parametrach dyrektywy.

Przykładowy kod testujący działanie (w pliku app.component.html):<h1 *appCytat2="1;kolor: 'LightGreen'">Nagłówek H1</h1><h3 *appCytat2="4;kolor: 'PaleGoldenRod'">Nagłówek H3</h3><p *appCytat2="2;kolor: 'Thistle'">Zwykly paragraf</p><ng-template [appCytat2]="3" [appCytat2Kolor]="'PowderBlue'"> <div>Element DIV</div></ng-template>

Oczekiwany wynik w przeglądarce:

W dyrektywie potrzebne są dwa pola oznaczone dekoratorem @Input():• appCytat2 – dokładnie taka sama nazwa jak nazwa selektora tej dyrektywy, oznacza

jednocześnie liczbę wyświetlanych cytatów,• appCytat2Kolor – zawiera nazwę koloru tła danego znacznika; używanie skróconej składni, tej

z gwiazdką, wymaga, aby nazwa parametru była poprzedzona nazwą selektora; w znacznikuwystarczy już jednak sama nazwa parametru (np. <p *appCytat2="2;kolor: 'blue'">...</p>);inaczej jest, jeśli korzystamy z ng-template – wtedy w znaczniku podajemy zawsze całenazwy parametrów, np.:<ng-template [appCytat2]="3" [appCytat2Kolor]="'blue'">...</ng-template>

Ładne kolorki z nazwami w HTML: https://www.w3schools.com/colors/colors_names.asp

Zadanie 5 – dodatkowe, dla chętnychMożna sobie zrobić dyrektywę appYouTube z wykładu, żeby lepiej zrozumieć, jak Angular generujezmienne ze skróconej składni do pełnych nazw w klasie dyrektywy.