我看着在blog post這個問題最近,但你帶來了一個有趣的邊緣情況下你總的查詢會比你想拉大。我會用與以前相同的方法來解決這個問題,但是要實現一個起點,並以一個limitToLast結束。此外,您使用從rxjs導入的BehaviorSubjects,因爲它們將允許您獲取當前值並增加一定量。實施例
let firstKey = new BehaviorSubject(''); // import 'rxjs/BehaviorSubject'
let nextKey = new BehaviorSubject('');
let pageSize = new BehaviorSubject(10);
let queryObservable = this.af.database.list('/items', {
query: {
orderByKey: true,
startAt: firstKey,
limitToFirst: pageSize
}
});
現在你有一個不斷移動的窗口開始與所述第一密鑰和使用按鍵作爲正在排序上的值。例如,爲了能夠更改密鑰,您需要將密鑰存儲在特定位置。
queryObservable.subscribe((data) => {
// angularfire2 adds a $key property to each result in an array
// Does not handle the edge case at the end of the list
if (data.length === pageSize.getValue()) {
nextKey.next(data.$key);
}
});
要增大和減小窗口,只需將firstKey值更改爲nextKey的值即可。
firstKey.next(nextKey.getValue());
你可以做各種各樣的巧妙的事情,比如添加多頁,還是回去用小的調整頁面以這種方法。這與添加必須在數據庫中維護的字段相反,在某些情況下這可能很麻煩。
如果你不能簡單計數的db行,你怎麼做分頁?而且,workarround一次帶來所有數據,那麼爲什麼要再次用開始/結束限制來查詢呢?我錯過了什麼? – Hllink
其中一種方法是使用'order'的子鍵,它是一個增量計數器0,1,2,3等。然後,您可以使用'orderByChild:'order'','startAt:10'和'endAt :19'獲取條目10-19的第2頁。 – Caleb
非常好的解決方案,謝謝分享:D – Hllink