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 nowegoprovidedInatrybutu. Akceptuje'root'jako wartość lub dowolny moduł aplikacji. Kiedy używasz'root', Twójinjectablebędzie zarejestrowany jako singleton w aplikacji i nie musisz go dodawać do dostawców modułu głównego. Podobnie, jeśli używaszprovidedIn: UsersModule,injectablejest zarejestrowany jako dostawcaUsersModulebez dodawania go doprovidersmoduł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 provideusługi w jakimkolwiek module innym niż moduł główny, lepiej użyj providerstablicy 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