(我来自德国,所以如果我的英语有点乱,我很抱歉......)
您好, 我正在尝试创建一个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>
非常感谢你!
以下是我的代码和错误消息的一些摘录:
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)
});
}
}
答案 0 :(得分:0)
似乎您应该从声明中移出LoginPage(因为它在模块中声明)并在导入下添加LoginPageModule。
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;