2017-10-05 76 views
1

我在角:可觀察執行要求多次

服務

getMembers(): Observable<any[]> { 
return this._http.get('http://localhost/membership/main/getUsers') 
    .map(response => response.json()); 
} 

組件

members$: Observable<any[]>; 
ngOnInit() { 
this.members$ = this._membersService.getMembers() 
} 

請求使用可觀察到的

-getUsers 
-getUsers 

都返回相同的JSON數據

每次我打開它返回重複請求頁面時

。這不是關於熱和冷的要求。因爲這兩個請求都返回相同的響應。但是當我刪除可觀察的時候,一切都很好。只有一個請求

+0

首先您需要修復的是成員數據類型$:any []。因爲你的服務時,地圖數據返回數據而不是Observable –

+0

據我瞭解,你在模板中使用'members $ | async' 2次 –

+0

@Danil,哇,謝謝,我將兩次異步調用,因爲如果有需要添加條件沒有值* ngIf =「(members $ | async)?. length> 0;否則noMember,然後在條件I循環另一個成員$ |異步,導致重複的請求,我如何驗證如果不是空的我循環沒有重複請求 – edizonv

回答

2

我想你在模板的兩個不同的地方使用async管道。爲了避免請求的重新執行,你可以使用share操作

import 'rxjs/add/operator/share'; 

members$: Observable<any[]>; 
// I personally prefer to set observables in ctor 
constructor() { 
this.members$ = this._membersService.getMembers().share(); 
} 

有關操作的更多信息,可以發現here

另一種方法是使用async管的在一個地方在ng-container的幫助下:

//template 
<ng-container *ngIf="members$ | async as members"> 
    <span *ngIf="members.length === 0; else showMembers">No members!</span> 
    <ng-template #showMembers> 
    <div *ngFor="let member of members">{{member | json}}</div> 
    </ng-template> 
</ng-container> 
+0

我循環表格中的數據..這就是爲什麼我不使用第二aporoach你說..我不知道在哪裏把表,如果條件內錶行。也許生病嘗試共享功能明天謝謝 – edizonv

+0

@edizonv你需要將使用'members'值的元素封裝在ng-container中,如果這有幫助,請告訴我。 –

+0

@edizonv你試過了嗎? –