我在應用程序內部進行了一些基本的變化檢測,我掙扎了很多。我已經在這裏呆了兩天,失去了意志!我想知道這裏有沒有人能指出我正確的方向。rxjs combine在Observable Arrays上檢測最新和Anguar2變化
我有一個group
與2 user
名單。一個是members
,另一個是moderators
。
此方法連接到數據庫以獲取每個對象的列表,其值爲$key
。現在我想使用這些鍵去獲取每個用戶的實際UserData
。我嘗試了一切,combineLatest
是我似乎能夠工作的唯一的東西。
所以這兩個調用函數,我在我的模板上使用async
管道。
members$ = myService.getMemberListByType("blah", "members");
moderators$ = myService.getMemberListByType("blah", "moderators");
我的功能如下所示。
private getMemberListByType(groupKey: string, memberType: string) {
return this.af.database.list(`groups/${groupKey}/${memberType}`)
.switchMap(userListKeyMap => {
console.log("UserListKeyMap", memberType, userListKeyMap);
let usersObservables: Observable<UserData>[] = [];
userListKeyMap.forEach((object) => {
usersObservables.push(this.af.database.object(`users/${object.$key}`)
.map(UserData.fromJSON));
});
return Observable.combineLatest(usersObservables);
});
}
但是,Angular沒有檢測到對此列表的更改,如下所示。假設其他方法在其他地方刪除member
並將其添加到moderator
。在這種情況下,members
列表正在發出一個空的用戶列表[]
。
My * ngIf和* ngFor不檢測這個新的空對象的變化。結果是用戶(在模板上)現在是2個列表的一部分,但是這個數據下的數據非常準確,如日誌所示。
我覺得當我在一個空的數組上組合最大值時,這是我的問題的根源。什麼都不能發出....所以角度如何改變?我不知道如何解決它。在這個「空白」用例中有沒有其他的方法可以組合使用?由於我使用的是async
管道,我需要一些有意義的東西。
任何人都可以照亮我的問題?
謝謝!
更新
我相信這個問題是不是angular2檢測空觀察的名單。特別是當一個Observable數組有一個值時,但後來該值變空。 Angular2不會看到空數組。目前我無法解決這個問題。要麼我的方法是錯誤的,要麼就是需要註冊一個空的可觀察列表?
- 藍色=組件的加載狀態是好的時,用戶是一個成員。
- Green =用戶已從成員移到經理/主持人。
- 紅色=這不存在,爲什麼它仍然顯示?
建議你周圍有這樣的回答HTTP看看://計算器.com/questions/41584409/change-detection-in-angular-2/41585545#41585545 – Aravind
你在teamviewer中可用嗎? – Aravind