角度 2:在注入路由器之前引导至少一个组件



我在RC5应用程序中收到此错误:

承诺拒绝:在注入路由器之前引导至少一个组件。

主要.ts:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

app.module.ts:

@NgModule({
  imports: [
    BrowserModule,
    routing,
    SharedModule.forRoot()
  ],
  declarations: [
    AppComponent, 
    ErrorComponent
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

shared.module.ts:

@NgModule({
  imports: [CommonModule, RouterModule, HttpModule, FormsModule, ReactiveFormsModule],
  declarations: [TranslatePipe, DateToStringPipe, HeaderComponent, FooterComponent],
  exports: [TranslatePipe, DateToStringPipe, CommonModule, FormsModule, ReactiveFormsModule, HeaderComponent, FooterComponent]
})
export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [
        FeedbackService,
        CookieService,
        AuthService,
        LoggerService,
        RouteGuard,
        {
          provide: TranslateLoader,
          useFactory: (http: Http) => new TranslateStaticLoader(http, 'app/languages', '.json'),
          deps: [Http]
        },
        TranslateService,
        SearchService,
        SharedComponent,
        HeaderComponent,
        FooterComponent
      ]
    };
  }
}
@NgModule({
  exports: [ SharedModule],
  providers: []
})
export class SharedRootModule {}

app.component.ts:

export class AppComponent extends SharedComponent implements OnInit {
constructor(
    _feedbackService: FeedbackService,
    _loggerService: LoggerService,
    _translateService: TranslateService,
    _authService: AuthService,
    _router: Router
) {
    super(
        _feedbackService,
        _loggerService,
        _translateService,
        _authService,
        _router
    );
}

最后是共享的组件:

constructor(
    protected _feedbackService: FeedbackService,
    protected _loggerService: LoggerService,
    protected _translateService: TranslateService, 
    protected _authService: AuthService, 
    protected _router: Router
) {
}

我尝试使用没有扩展名的AppComponent SharedComponent如下所示:

export class AppComponent implements OnInit {
constructor(){
}

但这仍然会产生同样的问题。

Angular 认为没有必要在Module级别中注入Router,在加载至少一个组件后注入Router是合理的。我怀疑您的至少一个服务必须注入Router,该提供给加载的Module,这会导致此错误。您可以做的是将使用Router的服务注入到应用程序组件,以便首先加载至少一个组件,并且所有子组件都将从应用程序组件继承该服务。

最新更新