5
respostas

Módulos no Angular

Estou configurando o projeto no Angular conforme código: https://s3.amazonaws.com/caelum-online-public/865-angular/stages/03-alurapic.zip

Minha dúvida é no componente, adicionei o PrimeNG no projeto e está funcionando somente no appComponent, ou seja, adicionei os componentes(PhotosComponent) pelo CLI e configurei no projeto. Tudo está funcionando sem erro mas o css e javascript do PrimeNG só funciona no componente principal do projeto.

Se eu colocar qualquer tag do PrimeNG no photo.component.html aparece no navegador como um simples html sem os estilos configurados.

Coloquei o PrimeNG conforme documentação: https://primefaces.org/primeng/showcase/#/setup

Projeto está compilando e no navegador não tem nenhum erro.

package.json

{
   "name": "alurapic",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "~10.0.9",
    "@angular/cdk": "^10.1.3",
    "@angular/common": "~10.0.9",
    "@angular/compiler": "~10.0.9",
    "@angular/core": "~10.0.9",
    "@angular/forms": "~10.0.9",
    "@angular/platform-browser": "~10.0.9",
    "@angular/platform-browser-dynamic": "~10.0.9",
    "@angular/router": "~10.0.9",
    "bootstrap": "^4.5.2",
    "font-awesome": "^4.7.0",
    "jquery": "1.9.1",
    "popper": "^1.0.1",
    "primeicons": "^4.0.0",
    "primeng": "^10.0.0-rc.3",
    "rxjs": "~6.5.5",
    "tslib": "^2.0.0",
    "zone.js": "~0.10.3"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.1000.6",
    "@angular/cli": "~10.0.6",
    "@angular/compiler-cli": "~10.0.9",
    "@types/node": "^12.11.1",
    "@types/jasmine": "~3.5.0",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "^6.0.0",
    "jasmine-core": "~3.5.0",
    "jasmine-spec-reporter": "~5.0.0",
    "karma": "~5.0.0",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "~3.0.2",
    "karma-jasmine": "~3.3.0",
    "karma-jasmine-html-reporter": "^1.5.0",
    "protractor": "~7.0.0",
    "ts-node": "~8.3.0",
    "tslint": "~6.1.0",
    "typescript": "~3.9.5"
  }
}
5 respostas

Fala ai Matias, tudo bem? Você importou os arquivos .js e .css no angular.json dentro da parte de scripts e styles?

Outro ponto, você precisa importar o módulo do NgPrime em todo módulo que fará utilização de algum componente do mesmo.

Espero ter ajudado.

Tudo bem, Matheus! importei .js, css no .json certinho.

"importar o módulo do NgPrime em todo módulo que fará utilização de algum componente do mesmo."

Isso que não entendi muito bem, se eu usar o componente no módulo, tenho que importar e exportar o componente do PrimeNG?

Eu resolvi com o código abaixo:

@NgModule({
  imports: [
    DataViewModule,
    ButtonModule,
    PanelModule,
    DialogModule,
    DropdownModule,
    InputTextModule,
    HttpClientModule,
    FormsModule
   ],
  declarations: [PhotosComponent],
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
  exports: [
     DataViewModule,
    ButtonModule,
    PanelModule,
    DialogModule,
    DropdownModule,
    InputTextModule,
    HttpClientModule,
    FormsModule
  ]
})

e no appModule, o principal, tem que importar também?

Fala ai Matias, o que eu quis dizer foi que o módulo onde você utiliza algum componente ou recurso da NgPrime você precisa importar o módulo dela dentro desse módulo.

Vamos supor que temos um módulo chamado A e outro B, dentro do módulo A o componente A utiliza o calendário da Prime, sendo assim, no módulo A a gente iria precisar importar o:

import {CalendarModule} from 'primeng/calendar';

Agora imagine que no módulo B temos um componente B que utiliza o Slider, então no módulo B teríamos que importar o módulo:

import {SliderModule} from 'primeng/slider';

Espero ter ajudado.

Seguindo seu raciocínio, se um módulo C precisar de:

import {CalendarModule} from 'primeng/calendar';

O móduo de C deve exportar o CalendarModule também:

 exports: [CalendarModule ]

Eu estava entendendo que; quando eu importar no módulo principal que carrega a aplicação, ex: app.module.ts, não precisava exportar em cada componente.

No código que fiz e que surgiu esse problema, se não exportar CalendarModule em cada módulo (A, C) não funciona independente de ter importado e exportado no app.module.ts

Fala Matias, os módulos não precisam exportar (exports) apenas importar (imports).

Eu estava entendendo que; quando eu importar no módulo principal que carrega a aplicação, ex: app.module.ts, não precisava exportar em cada componente.

Depende, caso você esteja declarando o componente no mesmo módulo que importou a sua dependência, ai não é necessário importar em lugar nenhum.

Mas, pensando em uma aplicação modularizada, ou seja, divida em vários módulos, ai sim é necessário importar a dependência em cada módulo.

O que você pode fazer é criar um SharedModule e importá-lo em vários lugares para compartilhar as dependências.

Espero ter ajudado.