如何在 Akita 中声明 Query/Service 以便在另一个模块中使用它

How to declare a Query/Service in Akita in order to use it in another module

我开始在我的离子应用程序中使用 Akita。

我有一个 SessionModule,我在其中声明了一个 SessionServiceSessionQuery、... 但是我想在我的 app.component.ts.

中收听 SessionQuery

我试图在 SessionModule 中声明所有内容:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SessionQuery } from './store/session.query';
import { SessionService } from './store/session.service';



@NgModule({
  declarations: [
    SessionQuery,
    SessionService
  ],
  imports: [
    CommonModule
  ],
  exports:[
    SessionQuery,
    SessionService
  ]
})
export class SessionModule { }

我在 app.module.ts

中声明为 import

并在我的 App.Component.ts:

中使用它
 public name$ = this.sessionQuery.selectName$;

  constructor(
    private platform: Platform,
    private splashScreen: SplashScreen,
    private statusBar: StatusBar,
    private sessionQuery: SessionQuery
  ) {
    this.initializeApp();
  }

但是当我 运行 它时,我得到了一些错误:

Error: Unexpected value 'SessionQuery' declared by the module 'SessionModule'. Please add a @Pipe/@Directive/@Component annotation.
Unexpected value 'SessionService' declared by the module 'SessionModule'. Please add a @Pipe/@Directive/@Component annotation.

我该怎么办?是否必须仅在声明查询的同一模块中使用查询?

我找到了解决方案:

事实上,您不需要 import/export 任何东西,但是,您需要通过在每个 class 声明之前放置它来标记 service+store+query 可注入:

@Injectable({
  providedIn: 'root'
})