我有一个组件,显示了从服务中检索到的变体列表,如您在此处所看到的。Angular 2:更新来自服务的组件视图
export class SellingMenuVarietiesComponent implements OnInit {
varieties: Variety[];
constructor(public sellingMenuService: SellingMenuService) { }
ngOnInit(): void {
this.getVarietyList();
}
// Get Variety List
getVarietyList(): void {
this.sellingMenuService.getVarieties().subscribe(res => {
this.varieties = res;
});
}
}
我有另外一个组件,消除品种,如下所示:
export class SellingVarietyEditComponent implements OnInit {
constructor(private sellingMenuService: SellingMenuService) { }
// Remove variety
removeVariety(id: number) {
this.sellingMenuService.removeVariety(id).subscribe(res => {
this.sellingMenuService.getVarieties();
});
}
}
在这个例子中,这两个组件在页面上可见在同一时间,所以当你删除一个品种,我希望列表自动更新并反映。目前,该品种将成功从数据库中删除,但将保留在列表中,直到我刷新页面。从SellingVarietyEditComponent
的removeVariety()
函数中注意到,我从我的服务中重新调用getVarieties()
方法,试图让列表更新,但它不起作用。
我在做什么错?我怎样才能做到这一点?
下面是该服务的相关功能:
@Injectable()
export class SellingMenuService {
// Get Variety List
public getVarieties(): Observable<any> {
return this.http.get(this.varietyList).map(response => {
return response.json();
}, (error: any) => {
console.log(error);
});
}
// Remove Variety
public removeVariety(varietyId: any): Observable<any> {
return this.http.get(this.removeVarietyUrl + varietyId).map(response => {
return response;
}, (error: any) => {
console.log(error);
});
}
}
编辑:
试图EventEmitter溶液:
在SellingMenuService
,我加入这个代码(请注意,我加入this.updateVarietyList.emit(null);
到getVarieties()
):
@Output() updateVarietyList: EventEmitter<any> = new EventEmitter();
// Get Variety List
public getVarieties(): Observable<any> {
return this.http.get(this.varietyList).map(response => {
this.updateVarietyList.emit(null);
return response.json();
}, (error: any) => {
console.log(error);
// TODO: implement error handling here.
});
}
SellingVarietyEditComponent
,我的删除按钮看起来是这样的:
<a class="remove-button" (click)="removeVariety(varietyId)" (updateVarietyList)="onVarietyListUpdate($event)" >Remove</a>
最后在SellingMenuVarietiesComponent
我加了这一点:
onVarietyListUpdate() {
console.log('test');
this.getVarietyList();
}
此代码但不起作用。我没有得到任何错误,但是onVarietyListUpdate()
方法从不执行。我在正确的道路上吗?我怎样才能解决这个问题?我发现的例子令人困惑,我无法将它们应用于我的代码。
我需要导入什么才能使用主题? – Brett
没关系,我从'rxjs/Subject'使用了import {Subject}; – Brett
这是否有效?如果该解决方案适合您,请接受它! –