#ngrx-entity
#ngrx-entity
Вопрос:
почему я получаю эту ошибку ниже и как это исправить.
Объект, переданный в реализацию selectId, возвращал неопределенное значение. Вероятно, вам следует предоставить свою собственную реализацию selectId. Объект, который был передан:
Ответ №1:
Вероятно, вы передаете объект, у которого нет свойства id. Итак, вам нужно переопределить selectId
метод при EntityAdapter
создании.
export const adapter: EntityAdapter<YourInterface> =
createEntityAdapter<YourInterface>({
selectId: nameofclass => nameofclass.yourID
});
Комментарии:
1. Куда это ведет? Я пытался добавить его, но он не попадает в него.
2. Это происходит при инициализации адаптера для этого конкретного объекта @Godrules500
Ответ №2:
Я исправил эту проблему, указав метаданные для нескольких объектов одновременно в EntityMetadataMap:
// entity-store.module.ts
...
export function selectEventId(event: Event): number {
return event.eventId;
}
export const entityMetadata: EntityMetadataMap = {
User: {},
Event: {
selectId: selectEventId
}
};
...
Ответ №3:
Эта ошибка обычно связана с отсутствующим первичным ключом объекта:
Каждый тип объекта должен иметь первичный ключ, значением которого является целое число или строка. Библиотека данных NgRx предполагает, что объект имеет свойство «id», значением которого является первичный ключ.
Не у каждого объекта будет свойство первичного ключа с именем «id». Для некоторых объектов первичный ключ может иметь любое имя или может быть комбинированным значением двух или более свойств. В этих случаях вы всегда указываете первичный ключ для этого объекта с помощью функции:
Эта функция возвращает значение первичного ключа указанного поля / свойства этого объекта.
Например:
Объект Villain не имеет первичного ключа с именем «id», но он называется «ключ». Для этого объекта функция selectId такова:
selectId: (villain: Villain) => villain.key;
И полное объявление метаданных объекта может быть чем-то вроде:
Файл: ../entity-store.module.ts
const entityMetadata: EntityMetadataMap = {
...
Villain: {
// We MUST specify a primary key / id field for each entity
// (if it does not have its own prop/field named: 'id') !!!
selectId: (villain: Villain) => villain.key, // <---
// optional setting - filter
filterFn: filterForVillains,
// optional setting - sort order
sortComparer: sortVillains
},
Hero { ... },
....
}