angular - modulos - El componente es parte de la declaración de 2 módulos.
que es un componente en angular (15)
Intento construir una aplicación iónica 2. Cuando pruebo la aplicación en el navegador con servicio iónico o la ejecuto en un emulador, todo funciona bien.
Pero cuando trato de construirlo cada vez que aparece el error
ionic-app-script tast: "build"
Error Type AddEvent in "PATH"/add.event.ts is part of the declarations of 2 modules: AppModule in "PATH"/app.modules.ts and AddEvent in "PATH"/add-event.module.ts.
Please consider moving AddEvent in "PATH"/add-event.ts to a higher module that imports AppModule in "PATH"/app.module.ts and AddEventModule.
You can also creat a new NgModule that exports and includes AddEvent then import that NgModule in AppModule and AddEventModule
mi AppModule es
import { NgModule, ErrorHandler } from ''@angular/core'';
import { BrowserModule } from ''@angular/platform-browser'';
import { IonicApp, IonicModule, IonicErrorHandler } from ''ionic-angular'';
import { AngularFireModule } from ''angularfire2'';
import { MyApp } from ''./app.component'';
import { Eventdata } from ''../providers/eventdata'';
import { AuthProvider } from ''../providers/auth-provider'';
import { HttpModule } from ''@angular/http'';
import { HomePage } from ''../pages/home/home'';
import { Login } from ''../pages/login/login'';
import { Register } from ''../pages/register/register'';
import { AddEvent } from ''../pages/add-event/add-event'';
import { EventDetails } from ''../pages/event-details/event-details'';
import { StatusBar } from ''@ionic-native/status-bar'';
import { SplashScreen } from ''@ionic-native/splash-screen'';
@NgModule({
declarations: [
MyApp,
HomePage,
Login,
Register,
AddEvent,
EventDetails
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp),
HttpModule,
AngularFireModule.initializeApp(config)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
Login,
Register,
AddEvent,
EventDetails
],
providers: [
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler}, Eventdata, AuthProvider
]
})
export class AppModule {}
y mi add-event.module.ts es
import { NgModule } from ''@angular/core'';
import { IonicPageModule } from ''ionic-angular'';
import { AddEvent } from ''./add-event'';
@NgModule({
declarations: [
AddEvent,
],
imports: [
IonicPageModule.forChild(AddEvent),
],
exports: [
AddEvent
]
})
export class AddEventModule {}
Entiendo que tengo que eliminar una de las declaraciones, pero no sé cómo.
Si elimino la declaración de AppModule, aparece un error que indica que no se encuentra la página de inicio de sesión, mientras se ejecuta el servicio iónico
Puede probar esta solución (para Ionic 3)
En mi caso, este error ocurre cuando llamo a una página usando el siguiente código
this.navCtrl.push("Login"); // Bug
Acabo de eliminar las citas como la siguiente y también importé esa página en la parte superior del archivo que utilicé llamar a la página de inicio de sesión
this.navCtrl.push (Iniciar sesión); // correcto
No puedo explicar la diferencia en este momento ya que soy un desarrollador de nivel principiante
Accidentalmente creé mi propio componente con el mismo nombre que el componente de una biblioteca.
Cuando utilicé mi IDE para importar automáticamente la biblioteca para el componente, elegí la biblioteca incorrecta.
Por lo tanto, este error se quejaba de que estaba volviendo a declarar el componente.
Lo solucioné importando desde el código de mi propio componente, en lugar de la biblioteca.
También podría solucionarlo nombrando de manera diferente: evitar la ambigüedad.
Algunas personas que usan la
Lazy loading
van a tropezar con esta página.
Esto es lo que hice para arreglar compartir una directiva.
- crear un nuevo módulo compartido
shared.module.ts
import { NgModule, Directive,OnInit, EventEmitter, Output, OnDestroy, Input,ElementRef,Renderer } from ''@angular/core'';
import { CommonModule } from ''@angular/common'';
import { SortDirective } from ''./sort-directive'';
@NgModule({
imports: [
],
declarations: [
SortDirective
],
exports: [
SortDirective
]
})
export class SharedModule { }
Luego en app.module y sus otros módulos
import {SharedModule} from ''../directives/shared.module''
...
@NgModule({
imports: [
SharedModule
....
....
]
})
export class WhateverModule { }
Como el error dice que elimine el módulo AddEvent de la raíz si su Página / Componente ya tiene un archivo de módulo iónico, si no solo elimínelo de la otra / página / componente secundario, al final la página / componente debe estar presente en un solo archivo de módulo importado si se va a utilizar.
Específicamente, debe agregar un módulo raíz si es necesario en varias páginas y si en páginas específicas lo mantiene en una sola página.
Desde el lanzamiento de Ionic
3.6.0
, cada página generada con Ionic-CLI es ahora un módulo angular.
Esto significa que debe agregar el módulo a sus importaciones en el archivo
src/app/app.module.ts
import { BrowserModule } from "@angular/platform-browser";
import { ErrorHandler, NgModule } from "@angular/core";
import { IonicApp, IonicErrorHandler, IonicModule } from "ionic-angular";
import { SplashScreen } from "@ionic-native/splash-screen";
import { StatusBar } from "@ionic-native/status-bar";;
import { MyApp } from "./app.component";
import { HomePage } from "../pages/home/home"; // import the page
import {HomePageModule} from "../pages/home/home.module"; // import the module
@NgModule({
declarations: [
MyApp,
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp),
HomePageModule // declare the module
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage, // declare the page
],
providers: [
StatusBar,
SplashScreen,
{ provide: ErrorHandler, useClass: IonicErrorHandler },
]
})
export class AppModule {}
Elimine la declaración de AppModule, pero actualice la configuración de AppModule para importar su AddEventModule.
.....
import { AddEventModule } from ''./add-event.module''; // <-- don''t forget to import the AddEventModule class
@NgModule({
declarations: [
MyApp,
HomePage,
Login,
Register,
//AddEvent, <--- remove this
EventDetails
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp),
HttpModule,
AngularFireModule.initializeApp(config),
AddEventModule, // <--- add this import here
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
Login,
Register,
AddEvent,
EventDetails
],
providers: [
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler}, Eventdata, AuthProvider
]
})
export class AppModule {}
También,
Tenga en cuenta que es importante que su AddEventModule exporte el componente AddEvent si desea usarlo fuera de ese módulo. Afortunadamente, ya lo tiene configurado, pero si se omitiera, habría obtenido un error si intentara usar el componente AddEvent en otro componente de su AppModule
Este módulo se agrega automáticamente cuando ejecuta un comando iónico. Sin embargo, no es necesario. Entonces, una solución alternativa es eliminar add-event.module.ts del proyecto.
IN Angular 4. Este error se considera como un problema de memoria caché en tiempo de ejecución.
caso: 1 se producirá este error, una vez que importe el componente en un módulo y vuelva a importar en submódulos.
caso: 2 Importe un componente en el lugar incorrecto y elimínelo y reemplácelo en el módulo correcto. Esa vez se considera un problema de memoria caché. Necesita detener el proyecto e iniciar -do nuevamente ng servir, funcionará como se esperaba.
La solución es muy simple.
Encuentra archivos
*.module.ts
y declaraciones de comentarios.
En su caso, busque el archivo
addevent.module.ts
y elimine / comente una línea a continuación:
@NgModule({
declarations: [
// AddEvent, <-- Comment or Remove This Line
],
imports: [
IonicPageModule.forChild(AddEvent),
],
})
Esta solución funcionó en ionic 3 para páginas generadas por ionic-cli y funciona tanto en el
ionic serve
ionic cordova build android --prod --release
como en el
ionic cordova build android --prod --release
.
Sea feliz...
Para superar este error, debe comenzar eliminando todas las importaciones de app.module.ts y tener algo como esto:
import { BrowserModule } from ''@angular/platform-browser'';
import { HttpClientModule } from ''@angular/common/http'';
import { ErrorHandler, NgModule } from ''@angular/core'';
import { IonicApp, IonicErrorHandler, IonicModule } from ''ionic-angular'';
import { SplashScreen } from ''@ionic-native/splash-screen'';
import { StatusBar } from ''@ionic-native/status-bar'';
import { MyApp } from ''./app.component'';
@NgModule({
declarations: [
MyApp
],
imports: [
BrowserModule,
HttpClientModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp
],
providers: [
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler}
]
})
export class AppModule {}
Luego edite su módulo de páginas, así:
import { NgModule } from ''@angular/core'';
import { IonicPageModule } from ''ionic-angular'';
import { HomePage } from ''./home'';
@NgModule({
declarations: [
HomePage,
],
imports: [
IonicPageModule.forChild(HomePage),
],
entryComponents: [HomePage]
})
export class HomePageModule {}
Luego agregue la anotación de IonicPage antes de la anotación de componentes de todas las páginas:
import { IonicPage } from ''ionic-angular'';
@IonicPage()
@Component({
selector: ''page-home'',
templateUrl: ''home.html''
})
Luego edite su tipo de rootPage para que sea una cadena y elimine las importaciones de páginas (si hay alguna en el componente de su aplicación)
rootPage: string = ''HomePage'';
Entonces la función de navegación debería ser así:
/**
* Allow navigation to the HomePage for creating a new entry
*
* @public
* @method viewHome
* @return {None}
*/
viewHome() : void
{
this.navCtrl.push(''HomePage'');
}
Puede encontrar la fuente de esta solución aquí: el componente es parte de la declaración de 2 módulos
Si sus páginas se crean usando CLI, entonces crea un archivo con filename.module.ts, entonces debe registrar su filename.module.ts en el conjunto de importaciones en el archivo app.module.ts y no insertar esa página en el conjunto de declaraciones .
p.ej.
import { LoginPageModule } from ''../login/login.module'';
declarations: [
MyApp,
LoginPageModule,// remove this and add it below array i.e. imports
],
imports: [
BrowserModule,
HttpModule,
IonicModule.forRoot(MyApp, {
scrollPadding: false,
scrollAssist: true,
autoFocusAssist: false,
tabsHideOnSubPages:false
}),
LoginPageModule,
],
Solución simple
Vaya a su archivo
app.module.ts
y
remove/comment
todo lo que se une con
add_event
.
No hay necesidad de agregar componentes a
App.module.t
s que son generados por el
ionic cli
porque crea un módulo separado para componentes llamados
components.module.ts
.
Tiene las importaciones de componentes de módulo necesarias
Tuve el mismo error pero descubrí que cuando importas un
AddEventModule
, no puedes importar un módulo
AddEvent
ya que presentaría un error en este caso.
Tuve el mismo problema Simplemente elimine cada aparición de módulo en "declaraciones" pero AppModule.
Trabajó para mi.
Resuelto: el componente es parte de la declaración de 2 módulos
- Eliminar el archivo pagename.module.ts en la aplicación
- Eliminar import {IonicApp} de ''ionic-angular''; en el archivo pagename.ts
- Eliminar @IonicPage () del archivo pagename.ts
Y ejecute el comando ionic cordova build android --prod --release está funcionando en mi aplicación