Angular 未定义调度操作存储时的ngrx 8
我在angular 8项目上安装了ngrx。当我采取行动时,我的商店还没有定义 这是我的密码Angular 未定义调度操作存储时的ngrx 8,angular,ngrx,Angular,Ngrx,我在angular 8项目上安装了ngrx。当我采取行动时,我的商店还没有定义 这是我的密码 @NgModule({ declarations: [ AppComponent, HeadComponent, ], imports: [ BrowserModule, AppRoutingModule, NgbModule, HttpClientModule, StoreModule.forRoot({ login : Reduc
@NgModule({
declarations: [
AppComponent,
HeadComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
NgbModule,
HttpClientModule,
StoreModule.forRoot({ login : Reducer.reducer })
],
providers: [{ provide: HTTP_INTERCEPTORS, useClass: ApiInterceptor, multi: true },],
bootstrap: [AppComponent]
及
这是我触发动作的代码
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const request = req.clone({ url : environment.endpoint + req.url, setHeaders : {'Authorization':'Bearer '+ this.token.get()}});
return next.handle(request).pipe( catchError((error: HttpErrorResponse, caught: Observable<HttpEvent<any>>) => {
if( error && error.status === 401 ) {
this.store.dispatch(Action.LOGOUT());
}
return throwError(error);
}));
}
当注销操作被触发时,我可以看到我的状态的控制台日志
{已记录:0}
但是当我订阅的时候
constructor( private http: HttpClient, private store : Store<Reducer.State>) {
store.pipe(select('logged')).subscribe( elem => { console.log( elem )})
http.get('/api/ping').subscribe(( data ) => {
console.log( data );
})
}
我的日志里什么都没有,你能帮我吗 Logged在全局存储状态中不存在,但它是login的一个属性。这是您使用StoreModule.forRoot定义它的方式,因此您必须执行以下操作:
store.pipe(select('login', 'logged')).subscribe( elem => { console.log( elem )})
您还将从减速器中获得一个返回值:
return loginReducer( state, action );
它不会改变结果中的任何内容,Ide只接受select'logged',我想这是因为我注入了withe private store:store当id do selectstore=>{console.log store;return store.logged}时,我在日志中得到了一个未定义的值。谢谢,这就是问题所在,我忘记了reducer定义中的返回值!
store.pipe(select('login', 'logged')).subscribe( elem => { console.log( elem )})
return loginReducer( state, action );