Beim Generieren von Diensten in der Angular-CLI werden zusätzliche Metadaten mit der Eigenschaft "bereitgestellt in" mit dem Standardwert "root" für den Injectable-Dekorator hinzugefügt.
@Injectable({
providedIn: 'root',
})
Was genau macht vorausgesetzt? Ich gehe davon aus, dass dies den Dienst wie einen Singleton-Dienst vom Typ 'global' für die gesamte Anwendung verfügbar macht. Wäre es jedoch nicht sauberer, solche Dienste im Provider-Array des AppModule zu deklarieren?
AKTUALISIEREN:
Für alle anderen bietet der folgende Absatz eine weitere gute Erklärung, insbesondere wenn Sie Ihren Dienst nur für ein Funktionsmodul bereitstellen möchten.
Es gibt jetzt eine neue, empfohlene Möglichkeit, einen Anbieter direkt im
@Injectable()Dekorateur mithilfe des neuenprovidedInAttributs zu registrieren . Es akzeptiert'root'als Wert oder als Modul Ihrer Anwendung. Wenn Sie verwenden'root', wird IhrinjectableBenutzer als Singleton in der Anwendung registriert, und Sie müssen ihn nicht zu den Anbietern des Root-Moduls hinzufügen. Wenn Sie das Modul verwendenprovidedIn: UsersModule,injectablewird es ebenfalls als Anbieter des Moduls registriert,UsersModuleohne esprovidersdem Modul hinzuzufügen . "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
UPDATE 2:
Nach weiteren Untersuchungen habe ich entschieden, dass es nur nützlich ist, zu haben providedIn: 'root'
Wenn Sie provideeinen Dienst in einem anderen Modul als dem Root-Modul ausführen möchten , ist es besser, das providersArray in den Dekoratoren des Feature-Moduls zu verwenden, da Sie sonst von zirkulären Abhängigkeiten geplagt werden. Interessante Diskussionen finden Sie hier - https://github.com/angular/angular-cli/issues/10170