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 neuenprovidedIn
Attributs zu registrieren . Es akzeptiert'root'
als Wert oder als Modul Ihrer Anwendung. Wenn Sie verwenden'root'
, wird Ihrinjectable
Benutzer 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
,injectable
wird es ebenfalls als Anbieter des Moduls registriert,UsersModule
ohne esproviders
dem 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 provide
einen Dienst in einem anderen Modul als dem Root-Modul ausführen möchten , ist es besser, das providers
Array 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