使用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 2Http
客户端。这是通过使用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
李>