почему я получаю эту ошибку ниже и как это исправить.
Сущность, переданная реализации selectId, вернулась неопределенной. Вероятно, вам следует предоставить собственную реализацию selectId. Объект, который был передан:
почему я получаю эту ошибку ниже и как это исправить.
Сущность, переданная реализации selectId, вернулась неопределенной. Вероятно, вам следует предоставить собственную реализацию selectId. Объект, который был передан:
Вероятно, вы передаете объект, у которого нет свойства id. Поэтому вам нужно переопределить метод selectId
в создании EntityAdapter
.
export const adapter: EntityAdapter<YourInterface> =
createEntityAdapter<YourInterface>({
selectId: nameofclass => nameofclass.yourID
});
Я исправил эту проблему, указав метаданные для нескольких сущностей одновременно в EntityMetadataMap:
// entity-store.module.ts
...
export function selectEventId(event: Event): number {
return event.eventId;
}
export const entityMetadata: EntityMetadataMap = {
User: {},
Event: {
selectId: selectEventId
}
};
...
Эта ошибка обычно связана с отсутствием первичного ключа объекта:
Каждый тип сущности должен иметь первичный ключ, значением которого является целое число или строка. Библиотека данных NgRx предполагает, что сущность имеет свойство «id», значение которого является первичным ключом.
Не каждый объект будет иметь свойство первичного ключа с именем «id». Для некоторых сущностей первичный ключ может иметь любое имя или может быть комбинированным значением двух или более свойств. В этих случаях вы всегда указываете первичный ключ для этой сущности с помощью функции:
Эта функция возвращает значение первичного ключа указанного поля/свойства этого объекта.
Например:
Entity Villain не имеет первичного ключа с именем «id», но он называется «key». Для этого объекта функция 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 { ... },
....
}