@datorama/akita-ng-effects

中文文档
1.0.6发布于 2021/11/10Apache-2.0TypeScriptESM + CJS近 30 天下载 1978

反应式国家管理扩展处理副作用.

中文使用文档
文档目录3 节
  1. 这是什么?
  2. 怎样用
  3. 使用量

秋田效应

秋田的目标是提供一个简单的API,使您能够使用面向对象的模式来管理应用程序中的状态. 在您的应用程序中引入效果是完全可选的, 允许您执行非常复杂的事件架构

这是什么?

使用效果连接到您的动作,并在动作事件时采取行动.

怎样用

在AkitaNgeffectsModule上记录一下你的效应.

// Only use .forRoot() once in your base module.
@NgModule({
  imports: [
    CommonModule, 
    AkitaNgEffectModule.forRoot([NavigationEffects])
  ],
})
export class CoreDataModule {}

// Use .forFeature() on any feature module
@NgModule({
  imports: [
    CommonModule, 
    AkitaNgEffectModule.forFeature([NavigationEffects])
  ],
})
export class FeatureModule {}

使用量

安排你的动作, 效果会听. 行动活动在全球发布在行动流上,以便每一种效果都能听到任何行动.

export const LOAD_MAIN_NAVIGATION = createAction('Load Main Navigation');
export const LOAD_MAIN_NAVIGATION_SUCCESS = createAction(
  'Load Main Navigation Success', 
  props<{ mainNav: MainNavigation }>()
);

使用效果来听到任何动作事件 。 您可以在任何动作事件上发布其它动作或运行服务任务.

@Injectable({
  providedIn: 'root',
})
export class NavigationEffects {
  constructor(
    // inject the actions stream
    private actions$: Actions, 
    private navigationService: NavigationService, 
    private store: NavigationStore
  ) {}

  // can also be immplemented with createEffect() function
  @Effect()
  loadMainNavigation$ = this.actions$.pipe(
    ofType(LOAD_MAIN_NAVIGATION),
    switchMap(() => this.navigationService.LOAD_MAIN_NAVIGATION().pipe(
      tap(mainNav => this.actions$.dispatch(loadMainNavigationSuccess({ mainNav }))))
    )
  );

  @Effect()
  loadMainNavigationSuccess$ = this.actions$.pipe(
    ofType(loadMainNavigationSuccess),
    map(({ mainNav }) => this.navigationService.updateNavigationTree(mainNav)),
    tap(mainRoutes => this.store.updateNavigation(mainRoutes))
  );
}

一个可能的用例 一个在警卫内部的行动.

@Injectable({
  providedIn: 'root',
})
export class InitRouterGuard implements CanActivate {
  constructor(
    private navigationQuery: NavigationQuery, 
    private actions: Actions
  ) {}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> {
    return this.navigationQuery.isNavInitialized$.pipe(
      tap((isInit) => {
        if (!isInit) this.actions.dispatch(loadMainNavigation());
      }),
      filter(isInit => isInit),
      map((val) => true)
    );
  }
}

版本与发布记录

@datorama/akita-ng-effects 共发布 9 个版本,首次发布于 2020/12/24;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.6latest2021/11/105 年前
1.0.52021/08/055 年前
1.0.42021/07/115 年前
1.0.32021/07/015 年前
1.0.22021/06/305 年前
1.0.12021/01/195 年前

关于 @datorama/akita-ng-effects 的常见问题

@datorama/akita-ng-effects 是什么?

反应式国家管理扩展处理副作用.

如何安装 @datorama/akita-ng-effects?

在项目目录运行 npm install @datorama/akita-ng-effects,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@datorama/akita(>= 6.0.0)、@angular/core(>= 8.0.0)、@angular/common(>= 8.0.0)、rxjs(*)、tslib(^2.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@datorama/akita-ng-effects 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@datorama/akita-ng-effects 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@datorama/akita-ng-effects 可以商用吗?

@datorama/akita-ng-effects 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@datorama/akita-ng-effects 的下载量有多少?

根据 npm 官方下载统计,@datorama/akita-ng-effects 在 2026/10/12 – 2026/11/10 这 30 天内被下载 1,978 次,日均约 66 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@datorama/akita-ng-effects 还在维护吗?

最新版本 1.0.6 发布于 2021/11/10(5 年前);至今共发布 9 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/12/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。