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
相关产品推荐
相关产品推荐

