Angular - instalacja niezbędnego oprogramowania
Angular - tworzenie pierwszego projektu
Angular - automatyczne generowanie kodu za pomocą polecenia ng
Angular - podstawowe typy zmiennych
Angular - interfejsy
Angular - klasy
Angular - klasy abstrakcyjne w TypeScript-cie
Angular - moduły, komponenty oraz dyrektywa ngModel
Angular - przełączanie klas styli za pomocą dyrektywy ngClass
Angular - dyrektywa ngStyle i dynamiczne modyfikowanie styli elementu HTML
Angular dynamiczne sterowanie atrybutami elementu HTML
Angular - dyrektywy strukturalne ngIf, ngFor i ngSwitch
Angular - przesyłanie danych do i z komponentu za pomocą dekoratorów Input, Output i klasy EventEmmiter
Angular - haki cyklu życia komponentu (lifecycle hooks)
Angular - tworzenie własnych dyrektyw
Angular- wykorzystanie wbudowanych i deklarowanie własnych pipe-ów
Angular - sterowanie kontrolkami, walidacja i tworzenie formularzy z użyciem dyrektywy ngModel
Angular - sterowanie kontrolkami, walidacja oraz tworzenie formularzy z wykorzystaniem FormControl i FormGroup z modułu ReactiveForms
Angular - dekorator ViewChild i odwoływanie się do elementów html w kodzie klasy komponentu
Angular - dekorator HostListener czyli podpinanie się pod zdarzenia komponentu
Angular - routing
Angular - tworzenie serwisów i wstrzykiwanie zależności
Angular - blokowanie dostępu do ścieżki
Angular - tworzenie lokalnego serwera na potrzeby serwisów
Angular - asynchroniczne wykonywanie kodu za pomocą typu Promise
Angular - typ Observable
Angular - typ BehaviorSubject
Angular - komunikacja z serwerem za pomocą HttpClient
Angular - operatory RxJs
Angular - async pipe czyli asynchroniczne wykonanie zapytania do serwera
Angular - resolver czyli ładowanie zanim jeszcze na dobre wlazłeś do komponentu
Angular - wstrzykiwanie treści do komponentu z wykorzystaniem projekcji
Angular material - implementacja własnych mat ikon
Angular material - wyświetlanie danych z wykorzystaniem tablic materialowych
Angular - publikowanie projektu w sieci
Angular - (lazy-loading) dynamicznie doładowywane moduły
Ta strona należy do działu:
Programowanie poddziału
Angular - podstawy Autor podstrony: Krzysztof Zajączkowski
Stronę tą wyświetlono już: 7444 razy
Drogi czytelniku droga czytelniczko! Wybacz mi tę spouchwałość, ale jeżeli masz problem z załadowaniem danych do komponentu, który został podpięty do z góry określonej ścieżki routingu to mam rozwiązanie twoich bolączek! A rozwiązanie to zwie się resolver ! Albowiem składa się tak wspaniale, że do danej ścieżki można podpiąć specjalną klasę resolvera, która załaduje wszystko co ci tylko przyjdzie do tej programistycznej głowy zanim w ogóle wejdziesz do komponentu. Czyniąc długą historię krótką oto przykład takiej klasy resolvera będącego tak naprawdę serwisem implementującym interfejs Resolve wymuszający obsługę jednej metody o jakże wymownej nazwie resolve :
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { of, Observable } from 'rxjs';
import { FirstContactService } from 'src/app/submodule/first-contact.service';
@Injectable({
providedIn: 'root'
})
export class BooksResolverService implements Resolve<any> {
constructor(
private firstContactService: FirstContactService
) { }
resolve(route: ActivatedRouteSnapshot, rstate: RouterStateSnapshot): Observable<any> {
return this.firstContactService.getBooks();
}
}
W powyższym przykładzie wykorzystałem serwis opisywany na stronie Programowanie → Angular - podstawy → Angular - komunikacja z serwerem za pomocą HttpClient . Teraz konieczne jest podpięcie tej klasy do danej ścieżki. Oto przykład jak to uczyniłem w pliku app-routing.module.ts :
path: 'books',
component: BooksListComponent,
resolve: {
books: BooksResolverService
}
Ale to jeszcze nie koniec, teraz trzeba jeszcze w konstruktorze komponentu BooksListComponent obsłużyć ładowanie danych:
constructor( private act: ActivatedRoute) {
this.act.data.subscribe(value => {
console.log('Some extra data:', value);
});
}
Po wejściu na tą ścieżkę oczom twym w konsoli przeglądarki powinny ukazać się następujące informacje:
Some extra data:
{...}
books: (2) [...]
0: Object { id: "1", title: "Rio Anaconda", author: "Wojciech Cejrowski" }
1: Object { id: "2", title: "Pan Tadeusz", author: "Adam Mickiewicz" }
length: 2
Możliwe jest również użycie wielu resolverów w następujący sposób:
path: 'books',
component: BooksListComponent,
resolve: {
books: BooksResolverService,
anotherResolver: AnotherResolver // podpięcie kolejnego resolvera
}
Tematy powiązane