Podczas generowania usług w Angular CLI, dodaje dodatkowe metadane z właściwością „dostarczone w” z domyślną wartością „root” dla dekoratora Injectable.
@Injectable({
providedIn: 'root',
})
Co dokładnie zapewnia? Zakładam, że oznacza to udostępnienie usługi jako pojedynczej usługi typu „globalnego” dla całej aplikacji, jednak czy deklarowanie takich usług w tablicy dostawców AppModule nie byłoby czystsze?
AKTUALIZACJA:
Dla wszystkich innych, poniższy akapit również zawiera inne dobre wyjaśnienie, w szczególności, jeśli chcesz świadczyć usługi tylko dla modułu funkcji.
Jest teraz nowy, zalecany sposób rejestracji dostawcy bezpośrednio w
@Injectable()
dekoratorze przy użyciu nowegoprovidedIn
atrybutu. Akceptuje'root'
jako wartość lub dowolny moduł aplikacji. Kiedy używasz'root'
, Twójinjectable
będzie zarejestrowany jako singleton w aplikacji i nie musisz go dodawać do dostawców modułu głównego. Podobnie, jeśli używaszprovidedIn: UsersModule
,injectable
jest zarejestrowany jako dostawcaUsersModule
bez dodawania go doproviders
modułu. ”- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
AKTUALIZACJA 2:
Po dalszych badaniach zdecydowałem, że warto mieć providedIn: 'root'
Jeśli chcesz skorzystać z provide
usługi w jakimkolwiek module innym niż moduł główny, lepiej użyj providers
tablicy w dekoratorach modułu funkcji, w przeciwnym razie będziesz nękany cyklicznymi zależnościami. Ciekawe dyskusje do przeprowadzenia tutaj - https://github.com/angular/angular-cli/issues/10170