angular typescript ionic-framework ionic2 ionic3

angular - La página es parte de las declaraciones de 2 módulos: Error en el producto de compilación iónica



typescript ionic-framework (3)

Este es un error básico de angular. Puedes ver el problema here . Entonces, la respuesta que se acepta hasta ahora es usar el módulo de compartir. Puedes hacer así:
- Crear un share.module.ts
- Import , declaration y export tu componente en este share.module.ts

import { NgModule } from ''@angular/core''; import {SharedComponentA} from "./SharedComponentA"; import {SharedComponentB} from "./SharedComponentB"; @NgModule({ imports: [ ], declarations: [ SharedComponentA, SharedComponentB ], providers: [ ], exports: [ SharedComponentA, SharedComponentB ] }) export class SharedModule {}


- Si desea utilizar su componente en una página Ionic (página de carga diferida) , importe el módulo compartido en el módulo de esa página Ionic:

import {SharedModule } from ''./SharedModule''; @NgModule({ imports: [ SharedModule //.. ], //.. })


- Si desea utilizar su componente en otro componente o no tener una página de carga diferida , importe el módulo compartido en su app.module.ts como se indicó anteriormente.
Ver más sobre ngModule

Cuando ejecuto npm run ionic: build puedo construir con éxito. Pero cuando ejecuto npm run ionic: build --prod obtengo el siguiente mensaje de error.

Error: Type PatientDetailPage in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.ts is part of the declarations of 2 modules: AppModule in /home/shiva/Ionic/af2-lists/src/app/app.module.ts and PatientDetailPageModule in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.module.ts! Please consider moving PatientDetailPage in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.ts to a higher module that imports AppModule in /home/shiva/Ionic/af2-lists/src/app/app.module.ts and PatientDetailPageModule in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.module.ts. You can also create a new NgModule that exports and includes PatientDetailPage in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.ts then import that NgModule in AppModule in /home/shiva/Ionic/af2-lists/src/app/app.module.ts and PatientDetailPageModule in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.module.ts. Error: Type PatientDetailPage in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.ts is part of the declarations of 2 modules: AppModule in /home/shiva/Ionic/af2-lists/src/app/app.module.ts and PatientDetailPageModule in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.module.ts! Please consider moving PatientDetailPage in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.ts to a higher module that imports AppModule in /home/shiva/Ionic/af2-lists/src/app/app.module.ts and PatientDetailPageModule in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.module.ts. You can also create a new NgModule that exports and includes PatientDetailPage in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.ts then import that NgModule in AppModule in /home/shiva/Ionic/af2-lists/src/app/app.module.ts and PatientDetailPageModule in /home/shiva/Ionic/af2-lists/src/pages/patient-detail/patient-detail.module.ts. at syntaxError (/home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:1550:34) at CompileMetadataResolver._addTypeToModule (/home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:14655:31) at /home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:14543:27 at Array.forEach (native) at CompileMetadataResolver.getNgModuleMetadata (/home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:14534:54) at addNgModule (/home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:23050:58) at /home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:23061:14 at Array.forEach (native) at _createNgModules (/home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:23060:26) at analyzeNgModules (/home/shiva/Ionic/af2-lists/node_modules/@angular/compiler/bundles/compiler.umd.js:22935:14)

Entiendo que estoy cargando los mismos módulos varias veces, pero no podía entender cómo eliminarlos.

my app.module.ts

@NgModule({ imports: [ BrowserModule, IonicModule.forRoot(MyApp), AngularFireDatabaseModule, AngularFireModule.initializeApp(firebaseConfig), AngularFireOfflineModule, IonicStorageModule.forRoot() // PatientDetailPage ], declarations: [ MyApp, HomePage, PatientDetailPage ], entryComponents: [ MyApp, HomePage, PatientDetailPage ], providers: [ StatusBar, SplashScreen, //AngularFireModule, //Storage, {provide: ErrorHandler, useClass: IonicErrorHandler} ], bootstrap: [IonicApp], })

patient-detail.module.ts es

import { NgModule } from ''@angular/core''; import { IonicPageModule } from ''ionic-angular''; import { PatientDetailPage } from ''./patient-detail''; @NgModule({ declarations: [ PatientDetailPage, ], imports: [ IonicPageModule.forChild(PatientDetailPage), ] }) export class PatientDetailPageModule { }


No necesita declarar nada en app.module.ts sobre PatientDetailPageModule . Por lo tanto, elimine todas las referencias a él. Si necesita usar el módulo PatientDetailPageModule dentro de otro componente, simplemente import como se muestra a continuación.

another.module.ts

@NgModule({ imports: [ PatientDetailPageModule, ], })

Utilice las compilaciones de Cordova :

ionic cordova build android --prod


Si está utilizando un componente como un EntryComponent dentro de un módulo, no necesita declararlo dentro del Módulo. Intente eliminar PatientDetailPage de las declarations en su app.module.ts .

Entonces, la mejor manera de hacer esto en mi opinión es export su PatientDetailPage desde su PatientDetailModule e importar el PatientDetailModule en su App Module.

Módulo de aplicación

@NgModule({ imports: [ BrowserModule, IonicModule.forRoot(MyApp), AngularFireDatabaseModule, AngularFireModule.initializeApp(firebaseConfig), AngularFireOfflineModule, PatientDetailModule, IonicStorageModule.forRoot() // PatientDetailPage ], declarations: [ MyApp, HomePage ], entryComponents: [ MyApp, HomePage, PatientDetailPage ], providers: [ StatusBar, SplashScreen, //AngularFireModule, //Storage, {provide: ErrorHandler, useClass: IonicErrorHandler} ], bootstrap: [IonicApp], })

Módulo paciente

import { NgModule } from ''@angular/core''; import { IonicPageModule } from ''ionic-angular''; import { PatientDetailPage } from ''./patient-detail''; @NgModule({ declarations: [ PatientDetailPage, ], imports: [ IonicPageModule.forChild(PatientDetailPage), ], exports: [ PatientDetailPage ] }) export class PatientDetailPageModule { }