我试图在我的 Angular 应用程序中使用 ngrx/store 几个小时,但我不知道我做错了什么。我的商店商品似乎永远不会更新。
这是我的商店界面:
export interface ItemStore{
items: Item[];
}
Item 是一个自定义对象 - 这是模型:
export interface Item {
id: number;
name: string;
description: string;
};
我有一个作为中央集线器的服务,它包含主要的“项目”数组和一个加载数据的函数“loadItems()”(从另一个组件调用):
@Injectable()
export class ItemsService {
items: Observable<Array<Item>>;
constructor(private http: Http, private store: Store<ItemStore>) {
this.items = store.select<Array<Item>>('items');
itemsService.loadItems();
}
}
loadItems() {
let initialItems: Item[] = [
{
id: 1,
name: "Item1",
description: "Description 1"
},
{
id: 2,
name: "Item2",
description: "Description 2"
}
];
this.store.dispatch({ type: 'LOAD_ITEMS', payload: initialItems });
}
这是我调用'loadItems'的主要应用程序组件;
export class HomeComponent implements OnInit {
items: Observable<Array<Item>>;
constructor(private itemService: ItemService, private store: Store<ItemStore>) {
this.items = itemsService.items;
}
}
这是我的减速器功能:
export const itemsReducer = (state: any, action: Action) => {
if (state == null) state = [];
switch (action.type) {
case 'LOAD_ITEMS':
return action.payload;
default:
return state;
}
};
以及我用来测试“项目”是否已更新的 html(它是一个简单的 div,它根据项目的大小绘制特定数量的按钮,在运行我的代码并加载手动数据后应该是 2) :
<div *ngFor="let item of items | async">
<button type="button" pButton icon="fa-check" label=Item: {{item.description}}></button>
</div>
知道发生了什么吗?我对ngrx/store 完全陌生,我读过的教程并没有太大帮助——它们似乎都有语法错误,有时已经过时了。