ngrx路由器存储无限循环

时间:2018-01-02 16:10:56

标签: angular ngrx

我正在尝试将ngrx路由器存储添加到我的应用程序并遇到问题。看一下github上提供的示例应用程序,看起来我只需要将routerReducer属性添加到我的应用程序状态,然后从ngrx router-store注册routerReducer。当我这样做时,应用程序立即进入无限循环尝试路由到第一页。这是正常工作,直到我添加路由器存储。实际上我可以导入我需要的所有东西,这很好。问题是routerReducer。一旦我注册,那么问题就开始了。这是我的州定义。我无法弄清楚造成这种情况的原因。

export interface App {
  config: AppConfig;
}

export interface RouterStateUrl {
  url: string;
  queryParams: Params;
}

export interface ApplicationState {
  app: App;
  routerReducer: fromRouter.RouterReducerState<RouterStateUrl>;
}

export const INITIAL_APP_STATE: App = {
  config: {
    Culture: '',
    Dictionary: {},
    Token: '',
    UserId: ''
  }
};

这是app.module中的一行。如果我删除routerReducer,那么一切正常。

StoreModule.forRoot({app: applicationReducer, routerReducer: routerReducer}, {metaReducers})

更多信息:

使用storeFreeze关于_resolveData不可序列化时出现错误。从我可以看出,通过注册自定义RouterStateSerializer解决了该问题。我已经做到了,但它没有被击中。我不知道上面的问题是否相关,但我想我会提到它。这就是我如何定义:

{provide: RouterStateSerializer, useClass: CustomRouterStateSerializer}

和班级:

export interface RouterStateUrl {
  url: string;
  queryParams: Params;
}

export class CustomRouterStateSerializer
  implements RouterStateSerializer<RouterStateUrl> {
  serialize(routerState: RouterStateSnapshot): RouterStateUrl {
    const { url } = routerState;
    const queryParams = routerState.root.queryParams;

    return { url, queryParams };
  }
}

1 个答案:

答案 0 :(得分:0)

问题是我的自定义序列化程序。我犯了一个骨头错误,它被默认的覆盖了。