Interação entre módulos em Angular
Em artigos anteriores, exploramos a interação entre um componente autônomo e outro. No entanto, quando aplicamos não apenas componentes autônomos, mas uma abordagem modular, como descrito no tema sobre Módulos, surge a questão de como ocorre a interação entre diferentes módulos. Em uma aplicação grande, é lógico dividir o sistema em módulos que executam diferentes tarefas. No entanto, pode ser necessário conectar e utilizar um módulo dentro de outro.
Por exemplo, vamos definir um projeto com a seguinte estrutura:
helloapp/ ├── src/ │ ├── app/ │ │ ├── data/ │ │ │ ├── data.component.ts │ │ │ ├── data.module.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ ├── main.ts │ ├── index.html ├── angular.json ├── package-lock.json ├── package.json └── tsconfig.json
Na pasta src/app/data
, criaremos dois arquivos, data.module.ts
e data.component.ts
, que representarão a funcionalidade de um novo módulo.
No arquivo data.component.ts
, definimos o componente DataComponent
:
import { Component } from "@angular/core";
@Component({
selector: "data-comp",
template: "<div><h3>{{message}}</h3></div>",
})
export class DataComponent {
message: string = "DataModule";
}
Já no arquivo data.module.ts
, definimos a classe do módulo DataModule
:
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule } from "@angular/forms";
import { DataComponent } from "./data.component";
@NgModule({
imports: [BrowserModule, FormsModule],
declarations: [DataComponent],
exports: [DataComponent], // exporta o componente
})
export class DataModule {}
Neste módulo, podemos incluir outros módulos que serão usados no contexto deste módulo e em seus componentes e diretivas.
Na seção declarations
, adicionamos o componente DataComponent
, que será parte deste módulo. Para que esse componente possa ser utilizado em outros módulos, DataComponent
também é adicionado na seção exports
.
Agora, vamos utilizar a funcionalidade do DataModule
no módulo principal AppModule
, no arquivo app.module.ts
:
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { AppComponent } from "./app.component";
import { DataModule } from "./data/data.module";
@NgModule({
imports: [BrowserModule, DataModule],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule {}
Os módulos que criamos são importados da mesma forma que os demais módulos, na seção imports
.
Após isso, poderemos utilizar a funcionalidade do DataModule
nos componentes pertencentes ao AppModule
. Por exemplo, podemos usar o DataComponent
dentro do componente AppComponent
, no arquivo app.component.ts
:
import { Component } from "@angular/core";
@Component({
selector: "my-app",
template: `<div>
<h1>AppModule</h1>
<data-comp></data-comp>
</div>`,
})
export class AppComponent {}
No arquivo main.ts
, carregamos o módulo AppModule
:
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { AppModule } from "./app/app.module";
const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);
Resultado: