Angular CLI - 使用最新版本时请添加@NgModule注释

Meg*_*ron 45 typescript angularjs-ng-model angular-cli angular

注意:我是Angular的新手,所以请原谅任何新来的愚蠢.

细节

  • 我已经安装了最新版本的Angular CLI
  • 'ng serve'后,默认应用加载并运行完全正常

问题

  • 我决定创建一个新模块,将其导入到app模块中
  • 这是我在Angular 2中做过几次的事情,它的工作非常好
  • 但是,由于我今天早上运行了最新版本的Angular CLI,导入模块会中断并收到以下错误:

compiler.es5.js:1689未捕获错误:模块'ProjectsModule'导入的意外指令'ProjectsListComponent'.请添加@NgModule注释.

应用模块

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { AngularFireModule } from 'angularfire2';
import { AngularFireDatabaseModule } from 'angularfire2/database';
import { AngularFireAuthModule } from 'angularfire2/auth';
import { environment } from '../environments/environment';
import { ProjectsModule } from './projects/projects.module';
import { HttpModule } from '@angular/http';


@NgModule({
  imports: [
    BrowserModule,
    HttpModule,
    ProjectsModule,
    AngularFireModule.initializeApp(environment.firebase, 'AngularFireTestOne'), // imports firebase/app needed for everything
    AngularFireDatabaseModule, // imports firebase/database, only needed for database features
    AngularFireAuthModule // imports firebase/auth, only needed for auth features
  ],

  declarations: [AppComponent],

  bootstrap: [AppComponent]

})

export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

项目模块

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { ProjectsListComponent } from './projects-list.component';
import { RouterModule } from '@angular/router';

@NgModule({

    declarations: [
        ProjectsListComponent
    ],


  imports: [
    BrowserModule,
    ProjectsListComponent,
    RouterModule.forChild([
      { path: 'projects', component: ProjectsListComponent }
    ])
  ]
})

export class ProjectsModule { }
Run Code Online (Sandbox Code Playgroud)

我用来设置模块的过程与我使用Angular 2时没有任何不同.但是,在Angular Cli,firebase和angular fire之间存在兼容性问题之后,我决定获取最新的一切早上.

任何对这一个的帮助都将受到广泛的赞赏,因为我已经了解了这一切,因为我已经碰到了一堵砖墙.

谢谢.

Pie*_*Duc 42

问题是ProjectsListComponent你的进口ProjectsModule.您不应该导入它,而是将其添加到导出数组中,如果您想在它之外使用它ProjectsModule.

其他问题是您的项目路线.您应该将这些添加到可导出变量,否则它不是AOT兼容的.而你应该随时随地进口BrowserModule其他地方AppModule.使用它CommonModule来访问*ngIf, *ngFor...etc指令:

@NgModule({
  declarations: [
     ProjectsListComponent
  ],
  imports: [
    CommonModule,
    RouterModule.forChild(ProjectRoutes)
  ],
  exports: [
     ProjectsListComponent
  ]
})

export class ProjectsModule {}
Run Code Online (Sandbox Code Playgroud)

project.routes.ts

export const ProjectRoutes: Routes = [
      { path: 'projects', component: ProjectsListComponent }
]
Run Code Online (Sandbox Code Playgroud)

  • AoT =提前(https://angular.io/guide/aot-compiler).内衬(不会破坏可出口的部件)将防止角度能够执行AoT - 这意味着你将错过AoT给予@MegaTron的巨大性能提升 (5认同)