Quando si generano servizi nell'interfaccia della riga di comando angolare, si aggiungono metadati extra con una proprietà "fornita in" con un valore predefinito di "root" per il decoratore iniettabile.
@Injectable({
providedIn: 'root',
})
Cosa fa esattamente fatto In? Suppongo che questo stia rendendo il servizio disponibile come un servizio singleton di tipo "globale" per l'intera applicazione, tuttavia, non sarebbe più pulito dichiarare tali servizi nell'array provider dell'AppModule?
AGGIORNARE:
Per chiunque altro, il paragrafo seguente ha fornito anche un'altra buona spiegazione, in particolare se si desidera fornire il proprio servizio a un solo modulo funzionale.
Ora esiste un nuovo modo consigliato per registrare un provider, direttamente all'interno del
@Injectable()
decoratore, usando il nuovoprovidedIn
attributo. Accetta'root'
come valore o qualsiasi modulo dell'applicazione. Quando lo usi'root'
,injectable
verrai registrato come singleton nell'applicazione e non dovrai aggiungerlo ai provider del modulo root. Allo stesso modo, se lo usiprovidedIn: UsersModule
, ilinjectable
è registrato come fornitore delUsersModule
senza aggiungerlo alproviders
modulo. "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
AGGIORNAMENTO 2:
Dopo ulteriori indagini, ho deciso che è utile solo avere providedIn: 'root'
Se si desidera provide
un servizio in qualsiasi modulo diverso dal modulo radice, allora è meglio usare l' providers
array nei decoratori del modulo funzione, altrimenti si sarà afflitti da dipendenze circolari. Discussioni interessanti che si terranno qui - https://github.com/angular/angular-cli/issues/10170