错误:商店没有提供者!在@ngrx 4.x

Posted

技术标签:

【中文标题】错误:商店没有提供者!在@ngrx 4.x【英文标题】:Error: No Provider for Store! in @ngrx 4.x 【发布时间】:2018-04-19 02:32:53 【问题描述】:

在将我的项目从 @ngrx 2.x 迁移到 4.1.0 时,我遇到了错误消息

NullInjectorError: 没有 Store 提供者!

店铺导入如docs:

import  StoreModule as NgRxStoreModule  from '@ngrx/store';

@NgModule(
  imports: [
    NgRxStoreModule.forRoot(reducerMap, 
      initialState: initial
    ),
    StoreRouterConnectingModule,
    EffectsModule.forRoot(effects)
  ],
  providers: [AppActions]
)
export class StoreModule 

【问题讨论】:

【参考方案1】:

原来我的一些服务通过

导入了商店
import  Store  from '@ngrx/store/src/store'

将导入更改为

import  Store  from '@ngrx/store'

解决了问题。

【讨论】:

自动导入:@ 我在 Web Storm 中添加“@ngrx/store/store”时遇到了类似的自动导入问题【参考方案2】:

我在尝试以 Angular 7 运行测试时得到了这个。

我的解决方案是:

    describe 的正文中定义一个 store mock:
let storeMock;
    beforeEach部分初始化它:
  beforeEach(async () => 
    storeMock = 
      dispatch: jasmine.createSpy("dispatch"),
      pipe: jasmine.createSpy("pipe").and.returnValue(from([
...
        requestTimeout: 5000,
...
      ]))
    ;
    TestBed.configureTestingModule 中定义Store 的提供者:
    TestBed.configureTestingModule(
      imports: [
        HttpClientTestingModule,
      ],
      providers: [
        ...
        
          provide: Store,
          useValue: storeMock
        
        ...
      ]
    );
    ```

【讨论】:

【参考方案3】:

对于 ngrx 8 使用:

import  provideMockStore  from '@ngrx/store/testing';

【讨论】:

以上是关于错误:商店没有提供者!在@ngrx 4.x的主要内容,如果未能解决你的问题,请参考以下文章

Ngrx 商店收到错误,因为类型上不存在属性“ofType”

将变量从商店绑定到角度ngrx中的组件

ngrx 和 ngxs 之间的性能差异? [关闭]

NgRx 无法从商店中选择

在 @ngrx/store 4.0 中提供 root reducer

Storybook 6 错误:ngrx no provider for Store 错误 - 如何修复? [关闭]