Naprawdę zmagam się z tworzeniem zmiennych globalnych w mojej aplikacji Angular 2.
Już googlowałem i czytałem wiele postów na StackOverflow na ten temat przez ostatnie 3 godziny, jednak wygląda na to, że po prostu nie mogę sprawić, by działało. Naprawdę mam nadzieję, że możesz mi pomóc i przepraszam za zadanie tego pytania.
Mam więc plik o nazwie globals.ts , który wygląda następująco:
import { Injectable } from "@angular/core";
@Injectable()
export class Globals {
var role = 'test';
}
I chcę użyć zmiennej roli w moim widoku HTML mojego komponentu w następujący sposób:
{{ role }}
Dodałem już plik globals.ts do mojego app.module.ts w następujący sposób:
providers: [
Globals
],
Bez względu na to, co zrobiłem z tym plikiem, po prostu nie zadziałało. Nie chcę ręcznie importować pliku globals.ts w każdym komponencie, dlatego chcę skorzystać z funkcji dostawców.
Naprawdę mam nadzieję, że możesz mi pomóc i jeszcze raz przepraszam.
Z poważaniem,
AE
export class Globals { var role = 'test'; }
<- co to jest?localStorage
?Odpowiedzi:
Możesz uzyskać dostęp do
Globals
jednostki z dowolnego punktu aplikacji za pośrednictwem iniekcji zależności Angular . Jeśli chcesz wypisaćGlobals.role
wartość w szablonie jakiegoś komponentu, powinieneś wstrzyknąćGlobals
przez konstruktor komponentu jak każdą usługę:Podałem
Globals
wHelloComponent
, ale zamiast tego może być dostarczony w jakimśHelloComponent's
komponencie nadrzędnym lub nawet wAppModule
. Nie będzie to miało znaczenia, dopóki nie będzieszGlobals
mieć tylko statycznych danych, których nie można zmienić (powiedzmy, tylko stałe). Ale jeśli nie jest prawdą i na przykład różne komponenty / usługi mogą chcieć zmienić te dane, toGlobals
musi być singletonem . W takim przypadku należy go podać na najwyższym poziomie hierarchii, w której będzie używany. Powiedzmy, że to jestAppModule
:Nie można też używać var w taki sposób, jak powinno
Aktualizacja
W końcu stworzyłem proste demo na stackblitz , w którym pojedynczy
Globals
jest dzielony między 3 komponenty, a jeden z nich może zmienić wartośćGlobals.role
.źródło
Używam do tego środowiska. Działa automatycznie i nie musisz tworzyć nowej usługi iniekcyjnej, a najbardziej przydatne dla mnie, nie musisz importować za pomocą konstruktora.
1) Utwórz zmienną środowiskową w swoim environment.ts
2) Zaimportuj environment.ts do pliku * .ts i utwórz zmienną publiczną (np. „Env”), aby móc ją wykorzystać w szablonie html
3) Użyj go w szablonie ...
w * .ts ...
(lub po prostu environment.isContentLoading na wypadek, gdybyś nie był potrzebny do szablonu)
Możesz stworzyć swój własny zestaw zmiennych globalnych w environment.ts w następujący sposób:
i importuj bezpośrednio te zmienne (y)
źródło
environments/environment.ts
i,environments/environment.prod.ts
które są zastępowane automatycznie.Niezbyt zalecane, ale żadna z pozostałych odpowiedzi nie jest tak naprawdę zmiennymi globalnymi. W przypadku prawdziwie globalnej zmiennej możesz to zrobić.
Index.html
Komponent lub cokolwiek innego w Angular
..w prawym górnym rogu po zaimportowaniu:
...później:
źródło
Możesz użyć obiektu Window i uzyskać do niego dostęp wszędzie. przykład window.defaultTitle = "mój tytuł"; wtedy możesz uzyskać dostęp do window.defaultTitle bez importowania czegokolwiek.
źródło