Jako programiści Angular stajemy przed wieloma wyzwaniami w naszej codziennej rutynie programistycznej. Jednym z nich jest sytuacja, w której musimy wejść w interakcję z natywnym obiektem JavaScript w aplikacji Angular, na przykład windowobiektem globalnym.
Jeśli czytałeś moją książkę Learning Angular — 3rd Edition , być może wiesz, że Angular jest mocno oparty na wstrzykiwaniu zależności (DI) . I że uważa się za dobrą praktykę przekształcanie obiektów innych niż Angular, takich jak okno, w obiekty do wstrzykiwania zamiast używania ich bezpośrednio. Dlaczego?
Framework Angular jest wieloplatformowy, co oznacza, że może działać w różnych środowiskach, takich jak urządzenia mobilne i serwery. Aplikacja Angular może działać na serwerze przy użyciu techniki Server Side Rendering (SSR) .
Aby uzyskać więcej informacji na temat wieloplatformowej natury Angular, zapoznaj się z moim artykułem Dlaczego warto wybrać platformę Angular .
Kiedy używamy SSR w Angular, nie ma windowobiektu. Jest dostępny tylko w środowisku przeglądarki. Aby przezwyciężyć ten problem i uczynić naszą platformę aplikacji nieświadomą, musimy udostępnić okno poprzez mechanizm Angular DI . W ten sposób możemy warunkowo korzystać z okna zgodnie z uruchamianym przez nas środowiskiem i sprawić, by nasza aplikacja działała poprawnie na serwerze.
Innym powodem jest to, że windowobiekt może być niedostępny podczas uruchamiania testów jednostkowych w środowisku ciągłej integracji (CI) . W tym scenariuszu moglibyśmy skorzystać z Angular DI i zapewnić alternatywną implementację obiektu windowpodczas wykonywania testów jednostkowych.
Ale jak sprawić, by okno można było wstrzykiwać?
Możemy użyć klasy InjectionToken frameworka Angular w następujący sposób:
import { InjectionToken } from '@angular/core';
export const WINDOW = new InjectionToken<Window>('Global window object', {
factory: () => window
});
import { Component, Inject } from '@angular/core';
import { WINDOW } from './window';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(@Inject(WINDOW) private window: Window) {}
}
Natywny Documentobiekt JavaScript zawiera właściwość o nazwie defaultView, która zwraca okno powiązane z bieżącym dokumentem. Możemy teraz przepisać nasz komponent Angular w następujący sposób:
import { DOCUMENT } from '@angular/common';
import { Component, Inject } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(@Inject(DOCUMENT) private document: Document) {
console.log(document.defaultView);
}
}
Czy to podejście było dla Ciebie przydatne? Jak uzyskać dostęp do obiektów innych niż Angular w aplikacjach Angular? Dajcie znać w komentarzach poniżej
W tym tygodniu otrzymałem wiadomość e-mail od członka codziennej listy e-mailowej. Chcieli wiedzieć: Jakie zasoby odwiedzasz codziennie, co tydzień i co miesiąc? Świetne pytanie! Cieszę się, że mogę podzielić się spostrzeżeniami na temat mojego przepływu pracy i najlepszych zasobów, z których korzystam.
Celem tej serii blogów jest zagłębienie się w bibliotekę Lit i uzyskanie pełnego zrozumienia jej unikalnych funkcji oraz tego, jak wyróżnia się na tle innych bibliotek i frameworków na rynku. Cykl podzielony jest na trzy części, obejmujące takie tematy jak 1.
W dzisiejszym hiperpołączonym świecie systemy medialne odgrywają kluczową rolę w kształtowaniu opinii publicznej, a co za tym idzie, w demokratycznym procesie decyzyjnym. W swojej dogłębnej analizie ekonomii politycznej komunikacji uczony Robert McChesney kwestionuje konwencjonalną wiedzę i przedstawia to, co nazywa „pięcioma prawdami” o mediach.
W dzisiejszym szybko zmieniającym się krajobrazie biznesowym koncepcja pracy hybrydowej i zdalnej nabrała bezprecedensowego rozpędu. Ponieważ firmy wciąż dostosowują się do zmieniających się potrzeb i oczekiwań swoich pracowników, eksperci z różnych dziedzin zebrali się, aby omówić korzyści, wyzwania i przyszłość tego transformacyjnego sposobu pracy.
Przejście do nowej kariery może być niezwykle trudne, jeśli spróbujesz zrobić to sam. Ważne jest, aby znaleźć odpowiedzialnych partnerów, którzy są na tym samym poziomie uczenia się co ty, którzy mają podobne cele, wytrwałość i motywację.
Często mamy trudności z wdrożeniem tego, co wiemy, że jest dla nas dobre. Od mówienia drugiej osobie, że ją kochamy, po pamiętanie, by mówić jak pirat, zawsze znajdą się tacy, którzy twierdzą, że dzień, tydzień lub miesiąc wydarzeń nie jest potrzebny, ponieważ już to robią.