Bileşen, 2 modül beyanının bir parçasıdır


119

Bir iyonik 2 uygulaması oluşturmaya çalışıyorum. Uygulamayı tarayıcıda ionic servis ile denediğimde veya bir emülatörde başlattığımda her şey yolunda gidiyor.

Ama her hata yaptığımda onu inşa etmeye çalıştığımda

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

benim AppModülüm

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 {}

ve benim add-event.module.ts

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 {}

Bildirimlerden birini kaldırmam gerektiğini anlıyorum, ancak nasıl yapılacağını bilmiyorum.

Bildirimi AppModule'den kaldırırsam, ionic hizmetini çalıştırırken Oturum Açma Sayfasının bulunamadığına dair bir Hata alıyorum

Yanıtlar:


193

Bildirimi 'den kaldırın AppModule, ancak AppModuleyapılandırmanızı 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 {}

Ayrıca,

Bileşeni bu modülün dışında kullanmak istiyorsanız AddEventModule, AddEventbileşeni dışa aktarmanızın önemli olduğunu unutmayın . Neyse ki, bunu zaten yapılandırdınız, ancak atlanmış olsaydı, AddEventbileşeni başka bir bileşeninde kullanmaya çalışsaydınız bir hata alırdınız .AppModule


cevabınız için teşekkürler, ayrıca içe aktarmalarımı "../pages/add-event/add-event.module" den {AddEventModule} olarak değiştirmem gerekiyor mu ;? İle ve ithalat olmadan hem Çünkü bir hata atılır
Stevetro

AppModule'da, AddEventModule için ek bir içe aktarma eklemeniz gerekir. Cevabı güncelleyeceğim
snorkpete

Her şeyi eklersem, "Sembol değerleri statik olarak çözülürken hata ile karşılaşıldı. Add-event.module, sembol AddModule çözümlemesine göre çözülemedi" hatası atılır
Stevetro

1
'add-event.module.ts' dosyası hangi klasörde?
snorkpete

AddEvents gibi aynı Klasörde, bu yüzden "../pages/add-event/add-event.module" kullandım; sayfa ionic g sayfası tarafından oluşturuldu
Stevetro

48

Kullanan bazı kişiler Lazy loadingbu sayfaya rastlayacak.

İşte bir yönergeyi paylaşmayı düzeltmek için yaptığım şey .

  1. yeni bir paylaşılan modül oluştur

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 { }

Sonra app.module ve diğer modül (ler) inizde

import {SharedModule} from '../directives/shared.module'
...

@NgModule({
   imports: [
       SharedModule
       ....
       ....
 ]
})
export class WhateverModule { }

neden doğrudan app.module'a eklemiyorsunuz? Ya da belki bir core.module'e, eğer onu app.module'dan içe aktaracaksanız
Dani

6
Bu harika! Ona bir eklemem var ... ShareModule'un İçe Aktarmalarına IonicPageModule.forChild (SharedModule) eklemeniz gerekecek. Bunu yapana kadar her türlü garip sorunu yaşıyordum.
Adway Lele

17

Çözüm çok basit. *.module.tsDosyaları ve yorum bildirimlerini bulun . Sizin durumunuzda addevent.module.tsdosyayı bulun ve aşağıdaki bir satırı kaldırın / yorum yapın:

@NgModule({
  declarations: [
    // AddEvent, <-- Comment or Remove This Line
  ],
  imports: [
    IonicPageModule.forChild(AddEvent),
  ],
})

Bu çözüm, hem de iyonik-cli ve eserleri ile oluşturduğu sayfaları için iyonik 3'te çalıştı ionic serveve ionic cordova build android --prod --releasekomutları!

Mutlu ol...


5

IN Açısal 4. Bu hata, hizmet çalışma süresi önbellek sorunu olarak kabul edilir.

case: 1 Bu hata, bileşeni bir modüle aktardığınızda ve alt modüllerde tekrar içe aktardığınızda ortaya çıkacaktır.

durum: 2 Bir Bileşeni yanlış yere içe aktarın ve Düzeltme modülünde kaldırıldı ve değiştirildi, Bu sefer önbellek hizmeti sorunu olarak kabul edildi. Projeyi durdurup hizmete tekrar başlaması gerekiyor, beklendiği gibi çalışacak.


Durum 1 benim durumumdaki sorun oldu, ÇÖZÜLDÜ!
Prem popatia

5

Sayfalarınız CLI kullanılarak oluşturulmuşsa, dosyaadı.module.ts ile bir dosya oluşturur, ardından filename.module.ts dosyanızı app.module.ts dosyasındaki imports dizisine kaydetmeniz ve bu sayfayı bildirimler dizisine eklememeniz gerekir. .

Örneğin.

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,
],

1

Bu modül, ionic komutunu çalıştırdığınızda otomatik olarak eklenir. Ancak gerekli değildir. Dolayısıyla, alternatif bir çözüm, add-event.module.ts'i projeden kaldırmaktır .


1

Bu çözümü deneyebilirsiniz (Ionic 3 için)

Benim durumumda, aşağıdaki kodu kullanarak bir sayfayı çağırdığımda bu hata oluyor

 this.navCtrl.push("Login"); // Bug

Sadece aşağıdaki gibi alıntıları kaldırdım ve ayrıca o sayfayı Giriş sayfası olarak adlandırdığım dosyanın üstüne aktardım.

this.navCtrl.push (Giriş); // Doğru

Başlangıç ​​seviyesinde bir geliştirici olduğum için şu anda farkı açıklayamam


5
tembel yükleme kullanmayı bıraktın arkadaşım google bu önemli
George

1

Ionic 3.6.0 sürümünden bu yana, Ionic -CLI kullanılarak oluşturulan her sayfa artık bir Angular modülüdür. Bu, modülü dosyadaki içe aktarmalarınıza eklemeniz gerektiği anlamına gelirsrc/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 {}

1

Bu hatayı aşmak için, app.module.ts'nin tüm içe aktarımlarını kaldırarak başlamalı ve buna benzer bir şeye sahip olmalısınız:

            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 {}

Ardından sayfalar modülünüzü şu şekilde düzenleyin:

            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 {}

Ardından, tüm sayfaların bileşen açıklamasından önce IonicPage ek açıklamasını ekleyin:

import { IonicPage } from 'ionic-angular';

@IonicPage()
@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})

Ardından, rootPage türünüzü dize olacak şekilde düzenleyin ve sayfaların içe aktarılmasını kaldırın (uygulamanızın bileşeninde varsa)

rootPage: string = 'HomePage';

O zaman navigasyon işlevi şöyle olmalıdır:

 /**
* Allow navigation to the HomePage for creating a new entry
*
* @public
* @method viewHome
* @return {None}
*/
 viewHome() : void
 {
  this.navCtrl.push('HomePage');
 }

Bu çözümün kaynağını burada bulabilirsiniz: Bileşen, 2 modül bildiriminin bir parçasıdır


1

Çözüldü - Bileşen, 2 modül bildiriminin bir parçasıdır

  1. Uygulamadaki pagename.module.ts dosyasını kaldırın
  2. {IonicApp} 'i' ionic-angular'dan içe aktarmayı kaldırın; pagename.ts dosyasında
  3. @IonicPage () pagename.ts dosyasından kaldır

Ve ionic cordova build android --prod komutunu çalıştırın - Uygulamamda Çalışmasını yayınlayın


1

Aynı sorun vardı. Sadece AppModule dışındaki "bildirimlerdeki" her modül oluşumunu kaldırdığınızdan emin olun.

Benim için çalıştı.


0

Basit düzeltme,

app.module.tsDosyanıza ve bağlantılı olan remove/commenther şeye gidin add_event. Adlı bileşenler için ayrı bir modül App.module.toluşturduğundan, tarafından oluşturulan bileşenlere bileşen eklemeye gerek yoktur .ionic clicomponents.module.ts

Gerekli modül bileşeni ithalatına sahiptir


0

Hatada, Sayfa / Bileşeniniz zaten iyonik modül dosyasına sahipse, AddEvent modülünü kökten kaldırmanızı söylediği gibi, yalnızca diğer / alt sayfadan / bileşenden kaldırılmamışsa, son sayfada / bileşen yalnızca bir modül dosyasında bulunmalıdır. kullanılacaksa ithal.

Spesifik olarak, birden çok sayfada gerekiyorsa kök modülünü eklemelisiniz ve belirli sayfalarda ise yalnızca bir sayfada tutmalısınız.


0

Yanlışlıkla aynı adla kendi bileşenimi oluşturdum bir kütüphane bileşeniyle .

Bileşen için kitaplığı otomatik olarak içe aktarmak için IDE'mi kullandığımda, yanlış kitaplığı seçtim.

Bu nedenle bu hata şikayet ediyordu , yeniden beyan ediyordum bileşeni .

Kütüphane yerine kendi bileşenimin kodundan içe aktararak düzelttim.

Farklı bir şekilde adlandırarak da düzeltebilirim: belirsizlikten kaçının.


0

Bu senaryoda, birden çok modülde kullanılan tüm bileşeni içe aktaran başka bir paylaşılan modül oluşturun.

Paylaşılan bileşende. bu bileşeni beyan edin. Ve sonra paylaşılan modülü appmodule'a ve erişmek istediğiniz diğer modüle içe aktarın. % 100 çalışacak, bunu yaptım ve çalıştırdım.

@NgModule({
    declarations: [HeaderComponent, NavigatorComponent],
    imports: [
        CommonModule, BrowserModule,
        AppRoutingModule,
        BrowserAnimationsModule,
        FormsModule,
    ] 
})
export class SharedmoduleModule { }
const routes: Routes = [
{
    path: 'Parent-child-relationship',
    children: [
         { path: '', component: HeaderComponent },
         { path: '', component: ParrentChildComponent }
    ]
}];
@NgModule({
    declarations: [ParrentChildComponent, HeaderComponent],
    imports: [ RouterModule.forRoot(routes), CommonModule, SharedmoduleModule ],
    exports: [RouterModule]
})
export class TutorialModule {
}
imports: [
    BrowserModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    FormsModule,
    MatInputModule,
    MatButtonModule,
    MatSelectModule,
    MatIconModule,
    SharedmoduleModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

bu kod açısal olarak test edildi ve mükemmel çalışıyor
Sarad Vishwakama

-3

Ben de aynı hatayı aldım ancak AddEventModulebir AddEventmodülü içe aktardığınızda , bu durumda bir hata oluşturacağı için bir modülü içe aktaramayacağınızı keşfettim .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.