【发布时间】:2018-09-19 16:22:44
【问题描述】:
我有两个组件:NewItemComponent 和 ListComponent。当我在相应组件中创建新项目时,我通知 ListComponent 以便它可以刷新它的数据模型:
export class NewItemComponent implements OnInit {
constructor(private itemService: ItemService, private notificationService: NotificationService) {
}
ngOnInit() {
}
createNewItem(item: Item) {
this.itemService.persist(item).subscribe((response: Item) => {
console.log(response);
this.notificationService.notifyNewItemHasBeenCreated(response);
});
}
}
export class ListComponent implements OnInit {
items: Item[];
constructor(private listService: ListService, private notificationService: NotificationService) {
}
ngOnInit() {
this.loadItems();
this.notificationService.item$.subscribe((item) => {
if (item != null) {
this.loadItems();
}
})
}
loadItems(){
this.istService.getItems().subscribe((data: Item[]) => {
this.items= data;
console.log(this.items);
});
}
}
@Injectable({
providedIn: 'root'
})
export class NotificationService {
private _item: BehaviorSubject<Item> = new BehaviorSubject<Item>(null);
public item$ = this._item.asObservable();
constructor() {
}
notifyNewItemHasBeenCreated(item: Item) {
this._item.next(item);
}
}
让我担心的是 loadItems() 多次调用 subscribe()。这可以吗,还是有更好的方法根据通知重新获取项目?
loadItems(){
this.listService.getItems().subscribe((data: Item[]) => {
this.items= data;
console.log(this.items);
});
}
ListService 返回 Observable:
export class ListService {
basePath = 'my-api.com';
apiPath = "item";
constructor(private httpClient: HttpClient) {
}
getItems(): Observable<Item[]> {
return this.httpClient.get<Item[]>(this.basePath + '/' + this.apiPath);
}
}
提前致谢,我们将不胜感激。
【问题讨论】:
标签: angular typescript