在Angular 6中使用ngrx时,如果出现错误“无法读取未定义的属性'ids'”,通常是由于在ngrx store中未正确定义实体的状态对象。
解决方法如下:
确保在ngrx store的状态对象中定义了适当的属性。在大多数情况下,这些属性包括entities和ids。
export interface EntityState {
entities: { [id: number]: T };
ids: number[];
}
确保在reducer中初始化了entities和ids属性,以及任何其他需要的属性。
import { createEntityAdapter, EntityState } from '@ngrx/entity';
interface MyEntity {
id: number;
name: string;
}
const adapter = createEntityAdapter();
interface MyEntityState extends EntityState {
// 添加任何其他必要的属性
}
const initialState: MyEntityState = adapter.getInitialState({
ids: [],
entities: {}
});
function myEntityReducer(state: MyEntityState = initialState, action: any): MyEntityState {
// 处理reducer逻辑
}
确保在组件中正确选择了ngrx store的状态对象。
import { selectIds } from './store/my-entity.selectors';
import { Store } from '@ngrx/store';
export class MyComponent {
ids$: Observable;
constructor(private store: Store) {
this.ids$ = store.select(selectIds);
}
}
通过遵循上述步骤,您应该能够解决问题并正确读取'ids'属性。