非常令人困惑的离子错误 - 无论是2个声明还是没有

时间:2018-06-18 13:10:36

标签: javascript angular ionic-framework ionic2 ionic-native

(我来自德国,所以如果我的英语有点乱,我很抱歉......)

您好, 我正在尝试创建一个Ionic-App,它具有基于本教程的注册/登录功能: https://devdactic.com/login-ionic-2/

如果我从显示的app.module.ts中复制完全类似的代码,我将永远收到错误

  

“找不到LoginPage的组件工厂。你有没有添加它   @ NgModule.entryComponents?”

当我尝试执行代码(离子服务或离子服务-l)时。

要修复此错误,我将LoginPage添加到app.module.ts中的声明和entryComponents,因此我的代码如下所示:

import { AuthServiceProvider } from './../providers/auth-service/auth-service';
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 { LoginPage } from '../pages/login/login';

@NgModule({
  declarations: [
    MyApp,
    LoginPage
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    LoginPage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    AuthServiceProvider
  ]
})
export class AppModule {}

现在我可以打开应用程序,登录并访问登录后面的“成员区”,一切似乎都运行正常。 但是,如果我尝试注销,我会收到一个新错误。

  

“类型LoginPage是2个模块声明的一部分:AppModule   和LoginPageModule!“

这条消息是有道理的,因为它是真的,我声明了LoginPage两次,所以我删除了login.module.ts(因为我知道我需要app.module.ts中的声明显然)。 这是一个令人困惑的问题:在我这样做之后,又出现了另一个新错误,即

  

“组件LoginPage不是任何NgModule的一部分,或者模块没有   已导入您的模块“!

总结:我可能只声明一次“LoginPage” - 如果我两次,我会收到错误。如果我删除了 ONE ,我会收到另一个错误,我宣布它无处...

现在我真的非常绝望如何解决这个问题以及如何摆脱恶性循环! : - (

如果我在注销后以root身份设置RegisterPage(而不是LoginPage),这可以正常工作。但是如果我尝试在开始时(登录前)将RegisterPage设置为root,我将得到与开头时相同的问题......

在互联网上,我发现只有“2声明” - 或者“不是任何部分” - 错误的情况,但从来没有,所以我真的希望,有人可以帮助我解决我的问题... < / p>

非常感谢你!

以下是我的代码和错误消息的一些摘录:

Screenshot of error no. 1

Screenshot of error no. 2

Screenshot of error no. 3

app.component.ts

import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';

import { RegisterPage } from '../pages/register/register';

@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  rootPage:any = RegisterPage;

  constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
      splashScreen.hide();
    });
  }
}

home.ts

import { Component } from '@angular/core';
import { NavController, IonicPage } from 'ionic-angular';
import { AuthServiceProvider } from '../../providers/auth-service/auth-service';

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

export class HomePage {

    username = '';
    email = '';

    constructor(private navCtrl: NavController, private auth: AuthServiceProvider) {
        let info = this.auth.getUserInfo();
        this.username = info['username'];
        this.email = info['email'];
    }

    public logout() {
        this.auth.logout().subscribe(succ => {
            this.navCtrl.setRoot('LoginPage');
            // (if I replace 'LoginPage' with 'RegisterPage', it'll work)
        });
    }
}

1 个答案:

答案 0 :(得分:0)

似乎您应该从声明中移出LoginPage(因为它在模块中声明)并在导入下添加LoginPageModule。

&#13;
&#13;
import { LoginPageModule } from '../pages/login/login.module';

@NgModule({
  declarations: [
    MyApp
  ],
  imports: [
    LoginPageModule,
    BrowserModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {
      provide: ErrorHandler,
      useClass: IonicErrorHandler
    },
    AuthServiceProvider
  ]
})
&#13;
&#13;
&#13;