我通过在选择器函数中添加排序方法解决了这个问题,并在实体状态中添加了一个参数来保存顺序,这是我提出的解决方案:
选择器:
export const selectCategoriesInStore = createSelector(
selectCategoriesState,
categoriesState => {
const items: CategoryModel[] = [];
each(categoriesState.entities, element => {
items.push(element);
});
const httpExtension = new HttpExtenstionsModel();
const result: CategoryModel[] = httpExtension.sortArray(items, categoriesState.lastQuery.sortField, categoriesState.lastQuery.sortOrder);
return new QueryResultsModel(result, categoriesState.totalCount, '');
}
);
您可以在这里看到我使用方法 httpExtension.sortArray() 来对结果进行排序。
减速机:(状态)
export interface CategoryState extends EntityState<CategoryModel> {
listLoading: boolean;
actionsLoading: boolean;
totalCount: number;
lastCreatedCategoryId: number;
lastQuery: QueryParamsModel;
showInitWaitingMessage: boolean;
error: any;
lastAction: string;
progress: number;
}
我添加了lastQuery参数,以便我可以从选择器访问排序参数。
如果您正在使用页面,请不要忘记也从后端对数据进行排序。