Ao gerar serviços na CLI Angular, ele adiciona metadados extras com uma propriedade 'fornecida em' com um padrão de 'raiz' para o decorador injetável.
@Injectable({
providedIn: 'root',
})
O que exatamente o Fornecido faz? Suponho que isso esteja disponibilizando o serviço como um serviço singleton do tipo 'global' para todo o aplicativo; no entanto, não seria mais fácil declarar esses serviços na matriz de provedores do AppModule?
ATUALIZAR:
Para qualquer outra pessoa, o parágrafo a seguir também forneceu outra boa explicação, principalmente se você deseja fornecer seu serviço apenas a um módulo de recursos.
Agora existe uma nova maneira recomendada de registrar um provedor, diretamente dentro do
@Injectable()
decorador, usando o novoprovidedIn
atributo. Ele aceita'root'
como um valor ou qualquer módulo do seu aplicativo. Ao usar'root'
, vocêinjectable
será registrado como um singleton no aplicativo e não precisará adicioná-lo aos provedores do módulo raiz. Da mesma forma, se você usarprovidedIn: UsersModule
, eleinjectable
será registrado como um provedor doUsersModule
sem adicioná-lo aoproviders
módulo. "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
ATUALIZAÇÃO 2:
Após uma investigação mais aprofundada, decidi que só é útil ter providedIn: 'root'
Se você deseja provide
um serviço em qualquer módulo que não seja o módulo raiz, é melhor usar a providers
matriz nos decoradores do módulo de recursos, caso contrário, você será atormentado por dependências circulares. Discussões interessantes a serem realizadas aqui - https://github.com/angular/angular-cli/issues/10170