错误:没有商店的提供者!在使用 Angular 4.0 尝试 @ngrx/store 时

Posted

技术标签:

【中文标题】错误:没有商店的提供者!在使用 Angular 4.0 尝试 @ngrx/store 时【英文标题】:Error: No provider for Store! when trying @ngrx/store with Angular 4.0 【发布时间】:2017-10-31 05:19:18 【问题描述】:

问题: 错误:商店没有提供者!

我正在 main.ts 中引导存储模块:

platformBrowserDynamic().bootstrapModule(AppModule,[
  provideStore(
    characters, 
    vehicles
  )
]);

并注入到vehicle.component.ts:

constructor(
    private _route: ActivatedRoute,
    private _router: Router,
    private _vehicleService: VehicleService,
    private _store: Store<any>
  ) 

完整的源代码在这里:GitHub, 最后一个版本运行on GitHub Pages

附言。将 Store 添加到提供程序会导致另一个错误: 无法解析 Store 的所有参数:(?, ?, ?)。

【问题讨论】:

【参考方案1】:

我遇到了这个错误,因为在我的组件中自动导入了 Store from import Store from '@ngrx/store/src/store' 而不是 import Store from '@ngrx/store'; .无论如何,这是在 Angular 5 中

【讨论】:

刚刚遇到同样的问题,甚至没有注意到!感谢这篇文章,你为我节省了一些时间:) 谢谢,由于某种原因,我从ngrx/store自动导入导入的商店【参考方案2】:

app.module.ts 中添加:

// Make sure you import from @ngrx/store
import  StoreModule  from '@ngrx/store';

@NgModule(
  imports: [
      StoreModule.forRoot( characters, vehicles ),
  ...

【讨论】:

我们应该通过真正的减速器吗?因为它只是组件测试 我不确定我是否遵循,答案是修复提供程序错误。但出于测试目的,我不明白为什么不通过实际的减速器。【参考方案3】:

为了完整起见,Angular 5 / Ngrx 4.1.1 将是(在 app.module.ts 中):

import  StoreModule  from '@ngrx/store';
import  reducers  from './reducers/reducers';

@NgModule(
    imports: [     
        StoreModule.forRoot(reducers),
        ...
    ],
    ...

有一个完整的例子here

【讨论】:

以上是关于错误:没有商店的提供者!在使用 Angular 4.0 尝试 @ngrx/store 时的主要内容,如果未能解决你的问题,请参考以下文章

Angular 4:错误:没有 AngularFireDatabase 的提供者

Angular 4 错误:没有 HttpClient 的提供者

CustomPipe 没有提供者 - 角度 4

使用 Jasmine 间谍进行 Angular 2 组件测试“没有 Http 提供者!”错误

Angular2“没有 t 的提供者!”和未捕获(承诺):错误:DI 错误

Angular 4 - Http 请求错误:您在预期流的位置提供了“未定义”