You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Effects中访问actions$与服务方法时出现undefined错误求助

问题原因

你遇到的this.actions$和this.farmerService为undefined的核心问题是箭头函数的this指向特性:
在类属性初始化阶段,createEffect传入的箭头函数不会绑定当前类实例的this,而是捕获外层上下文的this(此时类实例尚未完全创建,严格模式下this为undefined),导致无法访问类中的注入属性。

解决方案

将createEffect的箭头函数替换为普通函数,并显式指定this的类型(帮助TypeScript做类型检查),这样普通函数会自动绑定类实例的this,就能正常访问注入的服务和Actions流。

修正后的完整代码
@Injectable()
export class FarmerEffects {
  loadFarmers$ = createEffect(function (this: FarmerEffects) {
    console.log('actions$', this.actions$);
    console.log('farmerService.getFarmers()', this.farmerService.getFarmers());
    return this.actions$.pipe(
      ofType(FarmerActions.farmers),
      mergeMap(() =>
        this.farmerService.getFarmers().pipe(
          map(farmers => FarmerActions.farmersSuccess({ data: farmers })),
          catchError(error => of(FarmerActions.farmersFailure({ error })))
        )
      )
    );
  });

  constructor(
    private actions$: Actions,
    private farmerService: FarmerService
  ) {}
}
额外检查项
  • 确保在NgRx模块中正确注册Effects:在根模块添加EffectsModule.forRoot([FarmerEffects]),或在特性模块添加EffectsModule.forFeature([FarmerEffects])。
  • 确认FarmerService的注入配置:要么在@Injectable()装饰器中添加providedIn: 'root',要么在模块的providers数组中声明该服务,确保依赖能被正确注入。

内容的提问来源于stack exchange,提问作者Nadee Darshika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:17:17