【问题标题】:Akita and Angular Error: StaticInjector and NullInjector Store, QueryAkita 和 Angular 错误:StaticInjector 和 NullInjector 存储、查询
【发布时间】:2020-02-14 03:39:28
【问题描述】:

我在 Angular 项目中执行秋田状态管理时遇到了错误。我只是提供一个简短的答案,以便像我这样的人可以解决这个问题。

Akita 文档和示例中对此没有明确的理解。

export interface ItemState extends EntityState<Item> {}

@StoreConfig({ name: 'items' })
export class ItemsStore extends EntityStore<ItemState> {
  constructor() {
    super();
  }
}

我收到错误: StaticInjectorError(平台:核心)[ItemsService -> ItemsStore]: NullInjectorError: 没有 ItemsStore 的提供者!

它应该可以工作

【问题讨论】:

    标签: angular akita


    【解决方案1】:

    文档中没有提到,但为了让它工作,我们只需要添加 provideIn: 'root'

    export interface ItemState extends EntityState<Item> {}
    @Injectable({
      providedIn: 'root'
    })
    @StoreConfig({ name: 'items' })
    export class ItemsStore extends EntityStore<ItemState> {
      constructor() {
        super();
      }
    }
    

    ItemsQuery 也是如此。希望这对某人有帮助

    【讨论】:

    • 先生,您是救生员!花很多时间在这上面,浏览文档等等——找不到任何相关的东西。现在我看到了这个答案,它在他们的示例代码中,很难看到:stackblitz.com/edit/…
    • 这应该被标记为答案,因为它直接回答了问题
    【解决方案2】:

    我想 ItemService 是您制作的一项服务,只是您忘记为它添加一个提供程序。您可以将 @Injectable() 装饰器更改为如下所示。

    @Injector({
        providedIn: 'root'
    })
    

    或者您可以将服务作为提供者添加到您正在使用该服务的模块中。

    会是这样的,

    @ngModule({
    ...,
    providers: [ItemService,...],
    ...
    })
    

    不要忘记在模块中导入服务。

    【讨论】:

    • 我说的不是服务,而是存储和查询。如果您使用了 Injectable,则无需将其添加到 ngModule 提供程序。您将有很多商店和查询,如果将所有这些都放在提供程序中,那将是一团糟。
    • 不管你在说什么,当服务既没有在根目录中提供,也没有在某些模块中提供提供者时,就会出现你给出的错误消息。
    猜你喜欢
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多