Angular ngrx-data записывает ответ службы в отдельные разделы entityCache
В настоящее время я работаю над проектом, в котором ngrx-data используется для хранения информации. Пока это работает отлично, но теперь я хочу сохранить данные сущности из конечной точки, которая дает мне два отдельных типа сущностей в своем ответе.
{
"posts": [
{
"id": 1,
"title": "Title"
},
{
"id": 2,
"title": "Title 2"
}
],
"users": [
{
"id": 1,
"username": "Username"
},
{
"id": 2,
"username": "Username 2"
}
],
"date": "1996-10-15T00:05:32.000Z"
}
Теперь я хочу сохранить их отдельно в entityCache
из ngrx-данных. Для этого я реализовал базовую службу HTTP в Angular, которая расширяет возможностиDefaultDataService
. Я интегрировал это в свой фасад и добавил необходимые метаданные.
constructor(entityServices: EntityServices) {
this.postsAndUsersService = entityServices.getEntityCollectionService(
'PostsAndUsers'
);
}
export const entityMetadata: EntityMetadataMap = {
PostsAndUsers: {
selectId: selectIdPostsAndUsers
}
}
Я могу получить всю полученную информацию "в целом" из магазина, но я думаю, что теряю многие преимущества, которые получаю от использования ngrx-data (например, получение массива идентификаторов).
Есть ли способ нормализовать / разделить данные и записать их в разные разделы entityCache
?
Большое спасибо за любой намек.
1 ответ
Вам нужно продлить getAll()
метод в вашем dataService
.
getAll(): Observable<Users[]> {
return super.getAll().pipe(map(data => data.users));
}
Но в этой концепции нужен другой dataService
для постов. Но я думаю, что это избыточность, лучше, если вы реализуете настраиваемое управление состоянием с пакетом ngrx, потому что этот пакет данных теперь слишком строг и поддерживает только чистые операции CRUD. Или нужно разделить данные на две конечные точки API.