【问题标题】:Angular error: no provider for ActivatedRoute角度错误:ActivatedRoute 没有提供者
【发布时间】:2018-08-08 22:00:39
【问题描述】:

我正在使用最新的 Angular 5,我遇到了异常

ERROR Error: StaticInjectorError(AppModule)[AppComponent -> ActivatedRoute]: 
  StaticInjectorError(Platform: core)[AppComponent -> ActivatedRoute]: 
    NullInjectorError: No provider for ActivatedRoute!
    at _NullInjector.get (core.js:1002)
    at resolveToken (core.js:1300)
    at tryResolveToken (core.js:1242)
    at StaticInjector.get (core.js:1110)
    at resolveToken (core.js:1300)
    at tryResolveToken (core.js:1242)
    at StaticInjector.get (core.js:1110)
    at resolveNgModuleDep (core.js:10854)
    at NgModuleRef_.get (core.js:12087)
    at resolveDep (core.js:12577)

app.module.ts 如下所示 从 '@angular/router' 导入 { Routes, RouterModule };

@NgModule({
  declarations: [
    AppComponent,
    OptyDetailsComponent,
    GlobalNavbarComponent
  ],
  imports: [
    BrowserAnimationsModule,
    BrowserModule,
    HttpModule,
    HttpClientModule,
    FlexLayoutModule,
    FormsModule,
    MatButtonModule,
    MatInputModule
    RouterModule
  ],
  entryComponents: [
  ], 
  providers: [
    DataStoreService,
    DataObjectsOscService,
    AdobeSignService,
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

【问题讨论】:

  • 你的路由器配置是怎么写的?可以加点代码吗?

标签: angular angular-activatedroute


【解决方案1】:

为了能够将ActivatedRoute 提供到您的角度元素中,您需要将调用RouterModule.forRoot 的结果导入您的根模块(AppModule)。这是因为RouterModule.forRoot 返回的模块包括ActivatedRoute 等实例的提供程序。

所以基本上你需要在根模块的导入中添加以下内容:

@NgModule({
  ...
  imports: [
    ...
    // Remark: because you havent defined any routes, I have to pass an empty
    // route collection to forRoot, as the first parameter is mandatory.
    RouterModule.forRoot([]),
    ...
  ],
  ...
})
export class AppModule { }

但老实说,尽管您没有为根模块定义任何路由,但您使用 ActivatedRoute 有点奇怪。

更多详情见:

ActivatedRoute provider source

RouterModule.forRoot() source

【讨论】:

  • 我已经像RouterModule.forRoot(routes, { enableTracing: false, onSameUrlNavigation: 'reload'})一样使用RouterModule.forRoot。如何将激活路由添加到此列表中?
  • 到哪个列表?你什么意思?
  • 根据您的说法,我应该添加 RouterModule.forRoot([]) 以使其正常工作。但我已经在以另一种方式使用 RouterModule.forRoot。那么我需要在自己的 RouterModule.forRoot 实现中进行哪些更改,以便将activatedRoute 包含到routes, { enableTracing: false, onSameUrlNavigation: 'reload'} 参数列表中?
  • 对我的回答添加了一个小说明。您无需对代码进行任何更改。
  • @dmorlock 你最好创建一个新问题
猜你喜欢
  • 2018-03-04
  • 2019-08-12
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2018-02-28
相关资源
最近更新 更多