02 lis 2017
5 min

Angular v.5.0.0 – co nowego?

Angular v.5.0.0

© Angular.io / Shutterstock Milan M

W końcu doczekaliśmy się Angulara w wersji 5.0.0, a już w marcu 2018, możemy spodziewać się wydania 6.0.0. Czas zrobić przegląd, co nowego w trawie piszczy. Cały spis zmian, możesz znaleźć tutaj:
Changelog v.5

Jak widzisz w powyższym linku, zmian jest sporo, opiszę parę ciekawszych / ważniejszych.

Nowe funkcjonalności Angular v.5.0.0

UpdateOn

Jedną z ciekawszych funkcjonalności, jest rozszerzenie API formularzy o funkcjonalność –  UpdateOn.

Obecnie, za każdym razem jak zmienia się wartość np. Inputa, uruchamia się proces walidacji tejże kontrolki. Dzięki funkcjonalności UpdateOn, możemy uruchomić proces walidacji dopiero w momencie submita formularza lub gdy kontrolka traci focus (blur event). Przykład użycia:

Reactive Forms:

this.username = new FormControl('', { updateOn: 'blur' });

Template Forms:

<input type="email" ngModel [ngModelOptions]="{updateOn: 'submit'}">

Domyślna wartość to ‘change’. Więcej informacji wraz z przykładami, znajdziesz w tym artykule:
https://netbasal.com/boosting-performance-with-the-new-updateon-option-in-angular-v5-18857279ace2

PreserveWhitespaces

Zaglądając do dokumentacji dekoratora @Component, możemy zauważyć nową właściwość o wdzięcznej nazwie “PreserveWhitespaces“. Dokumentacja właściowości TUTAJ.

Owa funkcjonalność, pozwala nam zachować whitespaces w templatce. Obecnie, jeśli napiszemy:

<span>Zaraz wstawię 3 spacje   </span>

To te 3 spacje, zostaną zastąpione jedną. Dzięki nowej funkcjonalności, jesteśmy w stanie je zachować.

Obecnie domyślna wartość PreserveWhitespaces to true, ale może to się zmienić w kolejnej wersji.

Możemy również przestawić globalnie wartość na false, w pliku tsconfig.json:

{
  "extends": "../tsconfig.json",
...
  "angularCompilerOptions": {
    "preserveWhitespaces": false
  },
...
}

Do dyspozycji dostajemy również atrybut ngPreserveWhitespaces:

<div ngPreserveWhitespaces>
whitespaces are preserved here
<span>    and here </span>
</div>

dzięki któremu, możemy skorzystać z zachowanie whitespaces wyłącznie lokalnie w pożądanym miejscu.

HttpClient

Nowy HttpClient pojawił się już w wersji 4.3.0, ale warto o nim wspomnieć, jest mniejszy i przyjemniejszy w użyciu. Wreszcie nie trzeba mapować odpowiedzi na JSON’a:

return this.http.get('some_url')
  .map(res => res.json())

Wystarczy wyłącznie:

return this.http.get('some_url')

Również mamy do dyspozycji wiele innych ficzerów, takich jak np. support interceptorów.

Zatem od wersji 5.0.0, HttpModule z @angular/http staje się przestarzały (ale nie zostaje usunięty! nie jest to breaking changes) i przeskakujemy na HttpClientModule z @angular/common/http.

Nowe Router Events

Pojawiły się nowe Router Events związane z guardami i ich aktywacją / deaktywacją:

GuardsCheckStart, ChildActivationStart, ActivationStart, GuardsCheckEnd, ResolveStart, ResolveEnd, ActivationEnd, ChildActivationEnd

O RouterEvents, popełniłem jakiś czas temu wpis:

http://wp.angular.love/2017/06/17/angular-router-events-i-spinner/

Zachęcam do lektury.

Inne, istotne zmiany Angular v.5.0.0:

  • support TypeScripta dla wersji 2.4
  • support dla RxJs dla wersji 5.5.2+
  • usunięcie OpaqueToken, teraz używamy InjectionToken
  • wiele zmian w DatePipe, min. nowe formaty (np fullTime)
  • wiele zmian dotyczących wydajności aplikacji

Link do aplikacji, która pomoże w przeskoczeniu do wersji 5.0.0:

Inne wersje

Sprawdź zmiany w innych wersjach Angular:

Najczęściej zadawane pytania

Jak ustawić updateOn w formularzach Angulara 5?

W Angularze 5 ustaw updateOn, aby walidacja kontrolki uruchamiała się przy utracie focusu lub wysłaniu formularza, zamiast przy każdej zmianie wartości. W Reactive Forms użyj na przykład new FormControl('', { updateOn: 'blur' }). W formularzu template-driven możesz ustawić [ngModelOptions]="{updateOn: 'submit'}". Domyślną wartością jest change.

Czy Angular 5 usunął HttpModule i jak przejść na HttpClientModule?

Angular 5 oznaczył HttpModule z @angular/http jako przestarzały, ale go nie usunął. Nowym rozwiązaniem jest HttpClientModule z @angular/common/http. Korzystając z HttpClient, nie trzeba ręcznie mapować odpowiedzi przez res.json(), a API zapewnia też obsługę interceptorów.

Jak zachować spacje w szablonie Angulara 5?

W Angularze 5 możesz zachować białe znaki lokalnie za pomocą atrybutu ngPreserveWhitespaces na elemencie, którego zawartość ma zachować odstępy. Możesz też ustawić preserveWhitespaces w angularCompilerOptions w pliku tsconfig.json, aby skonfigurować zachowanie globalnie. Wartość domyślna opisana w artykule to true.

Jakie nowe zdarzenia routera dodano w Angularze 5?

Angular 5 dodał zdarzenia routera związane ze sprawdzaniem guardów, aktywacją tras i rozwiązywaniem danych. Należą do nich GuardsCheckStart, GuardsCheckEnd, ActivationStart, ActivationEnd, ChildActivationStart, ChildActivationEnd, ResolveStart i ResolveEnd. Można ich używać do obserwowania tych etapów nawigacji.

Czym zastąpić OpaqueToken w Angularze 5?

W Angularze 5 zamiast OpaqueToken należy używać InjectionToken. Artykuł wymienia tę zmianę wśród istotnych zmian wersji 5.0.0: OpaqueToken został usunięty, a InjectionToken jest wskazanym zamiennikiem. Jeśli aktualizujesz aplikację korzystającą ze starego tokenu, sprawdź jego użycia i zastąp je nowym API.

Podziel się artykułem

Zapisz się na nasz newsletter

Dołącz do community Angular.love i bądź na bieżąco z trendami.