要捕获所有操作,您可以使用ngrx/effects库中的@Effect()
装饰器。通过在@Effect()
装饰器中使用ofType()
操作符,您可以指定要捕获的操作类型。
以下是一个示例代码,演示如何使用@Effect()
装饰器来捕获所有操作:
import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { tap } from 'rxjs/operators';
@Injectable()
export class MyEffects {
constructor(private actions$: Actions) {}
logAllActions$ = createEffect(() => {
return this.actions$.pipe(
ofType('*'), // 捕获所有操作
tap((action) => {
console.log('捕获到操作:', action);
})
);
}, { dispatch: false });
}
在上面的代码中,logAllActions$
是一个使用createEffect()
函数创建的效果。在这个效果中,我们使用this.actions$
来订阅所有的操作。然后,通过使用ofType('*')
操作符,我们指定要捕获的操作类型为所有类型。最后,我们使用tap()
操作符来在控制台中打印捕获到的操作。
请注意,我们在createEffect()
函数的第二个参数中传递了{ dispatch: false }
选项,以防止这个效果再次派发操作。
要使用这个效果,您需要将MyEffects
类添加到您的注入器提供商中,并将其添加到您的 EffectsModule.forRoot()
函数中。例如:
import { NgModule } from '@angular/core';
import { EffectsModule } from '@ngrx/effects';
@NgModule({
imports: [
EffectsModule.forRoot([MyEffects])
]
})
export class AppModule { }
现在,logAllActions$
效果将捕获和打印所有操作。