【发布时间】:2017-03-15 19:13:44
【问题描述】:
我在显示列表的同一页面上有删除操作。当我执行删除 api 中的数据更改但它没有反映在列表本身中。
我尝试了几件事,其中之一是将已删除的对象从可观察数组中拉出。这不起作用,这不是我想要的,因为它不会反映其他用户是否从列表中添加或删除了“人”。
现在唯一可行的方法是在删除操作完成后触发api调用,但效率不高。
在我看来,正确的方法是触发或刷新订阅,以便它返回 api 获取新数据并将新数据添加或将数据库中不存在的数据删除到可观察数组中。
有没有办法使用 observable 和 RxJs 来做到这一点?
感谢您的帮助
import { Component, OnInit } from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {PeopleService} from '../shared/people.service';
import {People} from '../shared/people.model';
import {ToastService} from '../../../core/toast/toast.service';
@Component({
selector: 'app-people-list',
templateUrl: './people-list.component.html',
styleUrls: ['./people-list.component.css']
})
export class PeopleListComponent implements OnInit {
peoples: Observable<People[]>;
constructor(private peopleService: PeopleService,
private toastService: ToastService) { }
getPeoples() {
this.peoples = this.peopleService.getPeoples()
}
deletePeople(people: People) {
this.peopleService.deletePeople(people)
.subscribe(
() => {
this.toastService.activate(' Deleted', 'People', 'danger');
},
(err) => console.log('Debug:deletefailed', err)
);
}
ngOnInit() {
this.getPeoples();
}
}
<div>
<h3>People List</h3>
<hr/>
<a href="" [routerLink]="['/peoples', 'new']"><button class="btn btn-primary">Add People</button></a>
<table class="table table-hover">
<thead class="thead-inverse">
<tr>
<th>Id</th>
<th>Number of People</th>
<th>Modify</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let people of peoples | async">
<th>{{people.id}}</th>
<td>{{people.purchaseCount}}</td>
<td><button href="#" [routerLink]="['/peopleDetail', people.id]" class="btn btn-sm btn-info">Edit/Detail</button></td>
<td><button (click) = "deletePeople(people)" class="btn btn-sm btn-danger">Delete</button></td>
</tr>
</tbody>
</table>
</div>
【问题讨论】:
-
`peoples: Observable
;`为什么你的组件中有你的 observable? -
该服务返回一个可观察对象,如果我在 getPeople 方法中订阅该服务,它也可能只是一个数组而不是可观察对象。
标签: angular rxjs angular2-observables