NgRx效应未触发

时间:2019-02-07 20:15:47

标签: angular ngrx nrwl

给出这个外观:

@Injectable()
export class LookupDataFacade
{
    public saved$: Observable<boolean>;
    public loaded$: Observable<boolean>;
    public allLookups$: Observable<ILookup[]>;
    public selectedLookup$: Observable<ILookup>;

    constructor( protected store: Store<LookupDataPartialState> ) { }

    loadAll()
    {
        this.store.dispatch( new LoadLookupData() );
    }

    ...
}

这个效果类:

@Injectable()
export class LookupDataEffects
{
    constructor(
        protected actions$: Actions,
        protected dataPersistence: DataPersistence<LookupDataPartialState>,
        protected service: LookupDataService ) { }

    @Effect()
    loadLookupData$ = this.dataPersistence.fetch<LoadLookupData>( LookupDataActionTypes.Load,
    {
        run: ( action: LoadLookupData, state: LookupDataPartialState ) =>
        {
            return this.service.get().pipe( map( lookups => ( {
                type: LookupDataActionTypes.Loaded,
                payload: { data: lookups }
            } ) ) );
        },

        onError: ( action: LoadLookupData, error: HttpErrorResponse ) => { this.handleError( error ); }
        } );

    ...

    handleError = function( error: HttpErrorResponse )
    {
        console.error( 'Error', error );
        alert( error.message );
        return new LookupDataError( error );
    }
}

页面加载时,将调用立面的'loadAll'方法。动作已分派,但始终没有执行适当的效果。

在我将NgRx和Nrwl软件包升级到最新版本之前,此代码曾经可以工作(需要这样做以解决我收到的“未捕获的TypeError:ctorParameters.map不是函数”致命错误)。

我没有看到任何错误,也没有网络流量指示失败。

有人看到明显的错误吗?

1 个答案:

答案 0 :(得分:0)

一些要检查的东西:

  • LookupDataEffects已在EffectsModule.forFeature([])
  • 中注册
  • LookupDataActionTypes.Load正确映射到new LoadLookupData

这里也有一个小错误:

onError: ( action: LoadLookupData, error: HttpErrorResponse ) => { this.handleError( error ); }

我们必须=> this.handleError( error )=> { return this.handleError( error ); }

fetch<LoadLookupData>应该为fetch<LoadedLookupData | LookupDataError >(这是可以在效果中分派的动作的返回类型)