1
resposta

HttpClientModule

Na criação do serviço AuthService o mesmo teve que realizar a injeção de dependência injetando a classe HttpClient. Quando o serviço foi injetado no componente SignInComponent em momento nenhum foi importado o módulo HttpClientModule e mesmo assim funcionou. Por que?

1 resposta

Olá, Thiago, tudo bem?

Nos desculpe a demora em te responder.

Você fez uma ótima observação! O que está acontecendo é o seguinte: perceba que o único lugar da aplicação em que HttpClientModule foi importado foi no módulo PhotoModule. Esse módulo, por sua vez, é importado por PhotoListModule, que é importado por PhotosModule, e que por fim é importado por AppModule.

Perceba que há uma "cadeia de importações" desde AppModule até o módulo HttpClientModule:

AppModule < PhotosModule < PhotoListModule < PhotoModule < HttpClientModule

Pode ser estranho, mas isso é suficiente para que a classe HttpClient, que faz parte de HttpClientModule, esteja disponível para a declaração AppComponent do módulo AppModule (ou seja, para toda a aplicação).

Mas atenção! Isso só é possível porque HttpClient é apenas uma classe, e não um componente que estamos utilizando no template de outro componente.

Se por algum motivo HttpClientModule declarasse um componente que quiséssemos utilizar no template de SignInComponent, por exemplo, aí então precisaríamos importar diretamente HttpClientModule em HomeModule.

Lembra que no arquivo AppRoutingModule nós utilizamos classes como PhotoListComponent e PhotoFormComponent mesmo sem importar seus respectivos módulos diretamente em AppModule ou no próprio AppRoutingModule? É uma situação semelhante, porque estamos usando apenas as classes desses componentes, e não o selector no template de algum outro componente. É como se essas classes também estivessem disponíveis através dessa "cadeia de importações":

AppModule < PhotosModule < PhotoListModule, PhotoFormModule

De certa forma, temos uma liberdade bem maior de utilizar essas "classes puras" em toda a nossa aplicação, incluindo HttpClient.

Mas para propósitos de organização, minha recomendação é importar o HttpClientModule diretamente em AppModule, já que é uma dependência que usamos em vários lugares da nossa aplicação (essa recomendação é mencionada na documentação).

Essa parte de módulos no Angular é bastante confusa mesmo, até eu me confundi em algumas coisas para poder ter explicar haha

Espero ter ajudado! Abraços e bons estudos :)