给出这个外观:
@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不是函数”致命错误)。
我没有看到任何错误,也没有网络流量指示失败。
有人看到明显的错误吗?
答案 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 >
(这是可以在效果中分派的动作的返回类型)