使用Angular 2 Http客户端在ngrx meta reducer中重新水合应用程序状态

使用Angular 2 Http客户端在ngrx meta reducer中重新水合应用程序状态,angular,redux,angular2-services,ngrx,Angular,Redux,Angular2 Services,Ngrx,我需要能够从@NgModule的导入中使用Angular 2Http客户端。这是通过使用Http客户端从后端获取数据来重新水化应用程序状态所必需的 下面是我的示例应用程序的配置方式: @NgModule({ imports: [ CommonModule, BrowserModule, HttpModule, ComponentsModule, RouterModule.forRoot(routes, { useHash: true }), S

我需要能够从
@NgModule的导入中使用Angular 2
Http
客户端。这是通过使用
Http
客户端从后端获取数据来重新水化应用程序状态所必需的

下面是我的示例应用程序的配置方式:

@NgModule({
  imports: [
    CommonModule,
    BrowserModule,
    HttpModule,
    ComponentsModule,
    RouterModule.forRoot(routes, { useHash: true }),
    StoreModule.provideStore(reducer),//See below for definition of reducer
    ...
下面是上面使用的
减速器
功能的定义:

const initialState: State = {
  ids: [],
  loading: false,
  query: ''
};

export function reducer(state = initialState, action: book.Actions): State {
  switch (action.type) {
    case book.ActionTypes.SEARCH: {
      const query = action.payload;
      ...
因此,我需要以某种方式使用
Http
客户端来填充上面的
initialState
常量。这可能吗?如果是,怎么做

问题是,在应用程序启动时,我需要以某种方式注入
Http
客户端

这是一个要求,因为我使用的库,即ngrx()似乎取决于在应用程序引导时定义的缩减器


非常感谢您在这方面的帮助…

您不能使用异步操作设置
初始状态
常量-它必须立即可用

即使您设法将
Http
注入
initialState
提供程序(是的,它在ngrx/存储源中有一个由
initialState
标记标识的工厂),它也不会在返回
initialState
之前等待异步操作(从服务器获取数据)-这是angular的同步工厂的限制

解决方案

  • 添加
    REHYDRATE
    操作并尽快将其发送(在引导过程中),其效果是从服务器获取数据,并使用
    REHYDRATE\u SUCCESS
    操作将其设置为状态
  • 从后端(预取)将数据作为全局变量注入
    index.html
    ,从那里读取
    initialState