我有一個組件,顯示了從服務中檢索到的變體列表,如您在此處所看到的。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
這是否有效?如果該解決方案適合您,請接受它! –