分层商店组织

时间:2019-10-05 22:32:11

标签: angular ngrx

我在弄清楚如何在Angular中构成分层存储时遇到问题。我想要多个在应用程序的特定部分上工作的reducer。

这里是描述:这是HR应用程序。我有一个人才模块(员工),其数据分为五个部分:专业知识,教育,backgroundCheck,位置和薪资,职位素养。

每个部分包含满足业务期望的相当复杂的逻辑。 我们正在为市场更新一些案例,我们需要在多个部分的组件之间共享数据。

所以从根模块开始,我已经为人才模块定义了根状态

我已经尝试使用如这些帖子中所述的CombineReducers: Angular 6 / NGRX Combine Reducers

所以从根模块开始,我已经为人才模块定义了根状态

export interface ITalentState {
    profile: IProfileState;
}

这是人才状况的减少者

export function talentReducer(state = talentInitialState, action: TalentActions): ITalentState {
    switch(action.type) {
        case TalentActionTypes.SetProfile:
            return {
                ...state,
                profile: action.profileData 
            }
        default: return state;
    }
}

ProfileState定义如下

export interface IProfileState {
    expertiseState: IExpertiseState;
}

这是专业知识部分:

export interface IExpertiseState {
    expertiseQuestions: ExpertiseQuestions;
    error: string;
}

专业知识部分

function expertiseReducer(state, action)
    switch(action.type) {
        case ExpertiseActionsTypes.LoadFailed:
            return {
                ...state,
                expertiseQuestions: new ExpertiseQuestions(),
                error: action.message
            }
        case ExpertiseActionsTypes.LoadSuccess:
            return {
                ...state,
                expertiseQuestions: action.questions,
                error: ''
            }
        default: return state;
    }
}

我希望有一种方法可以实现存储粒度和拆分reducer,以便它们更易于管理,但是我在调​​试器中看到的唯一一件事是调用了专业存储方法,但从不调用reducer并且不更新值。商店。

1 个答案:

答案 0 :(得分:0)

我知道了。基本上,要使用这种存储,我们需要为每个功能组合一个化简(取决于粒度),然后将其公开为一个公共化简。 解决方法如下:

export interface TalentState {
expertise: fromExpertise.ExpertiseState
}

export const reducers: ActionReducerMap<TalentState>  = {
expertise: fromExpertise.expertiseReducer
}

export const getTalentState = createFeatureSelector<TalentState>('talent')