Я использую rss2json , чтобы использовать RSS-канал.Для включения нумерации страниц нет параметра page
.Существует параметр count
, который я могу передать в запрос.Я могу загрузить канал и получить результаты обратно.Я создал сервис, используя ionic , чтобы сделать запрос на получение фида:
getRssFeed(rssUrl: string, count: number) {
return new Promise<any>(resolve => {
this.http.get(`${ environment.podcast.baseUrl }?rss_url=${ rssUrl }&api_key=${ environment.podcast.apiKey }&count=${ count }`)
.subscribe(data => {
resolve(data);
}, error => {
console.error('Something really bad happened trying to get rss feed.');
console.error(error);
});
});
}
Это прекрасно работает.Я могу получить данные обратно - все хорошо.Я использую компонент бесконечной прокрутки для обработки нумерации страниц.Опять все хорошо.Я начинаю с 10 эпизодов подкаста.Я выхожу из системы, когда хочу загрузить больше эпизодов:
Когда я выполняю прокрутку, служба выполняет правильный вызов, но из-за rss2json
сервис не имеет параметра page
, он вернет весь массив при обновлении count
.
Так что мне нужно сделать что-то вроде этого:
episodes: Array<any>;
count = 10;
...
this.episodes.splice(this.episodes.length, this.count, data.items);
Мне нужночтобы узнать, сколько серий у меня уже есть.Когда я в первый раз попаду в мой список, у меня будет 10 (я хочу увеличить +10 на каждую загрузку).Поэтому мне нужно:
- Узнать, сколько у меня сейчас эпизодов (10, 20, 30 и т. Д.)
- Сделать запрос, чтобы получить больше эпизодов
- Сервис возвращает 20 эпизодов - но он будет всегда начинаться с нуля.
- Нарезать первые 10, 20, ??эпизоды, которые возвращаются, добавьте оставшиеся 10 в конец списка.
Я не уверен, как этого добиться, и могу использовать какое-то направление.
Вот как язапросить больше эпизодов:
this.myPodcastService.getRssFeed(this.rssUrl, this.count)
.then(data => {
if (data) {
// console.log('data', data.items);
// data is an object
// data.items is an array of episodes
// this.episodes.splice(this.episodes.length, this.count, data.items);
} else {
...
}
...
});
Например, в первый раз, когда я доберусь до конца своих эпизодов, у меня будет 10 на странице.Я хочу выйти, получить еще 10 эпизодов.Поэтому мне нужно увеличить мою переменную count
до 20
и передать ее как параметр count
.
Служба вернет 20 элементов.Первые 10 я хочу удалить (они уже на экране).Мне нужны только последние 10 эпизодов ...
Теперь у меня будет 20 эпизодов.При следующей прокрутке мне нужно увеличить count
до 30
.Сервис вернет массив из 30 элементов.Мне нужно будет удалить (склеить) первые 20;оставив только последние 10 - затем добавьте это в массив episodes
.
В журнале должно отображаться что-то вроде:
this.episodes[10]
this.episodes[20]
this.episodes[30]
Надеюсь, это имеет смысл.Я знаю, чего я пытаюсь достичь, я изо всех сил, как на самом деле это сделать.Спасибо за любые предложения!
РЕДАКТИРОВАТЬ / РЕШЕНИЕ
Большое спасибо за предложение!В случае, если кто-то еще сталкивается с этим, вот что я придумал, что делает именно то, что мне нужно.
// load more episodes using infinite scroll.
loadMoreEpisodes(event) {
console.log('--> loading more episodes');
this.count = (this.count + this.count); // 10, 20, 30...
this.myPodcastService.getRssFeed(this.rssUrl, this.count)
.then(data => {
if (data) {
// append the new episodes to the existing array
this.episodes.push(...data.items.splice(-this.episodes.length, this.count));
event.target.complete();
console.log('this.episodes', this.episodes);
} else {
this.alertCtrl.create({
header: 'Error',
subHeader: 'Something bad happened',
message: 'Something internet related happened & we couldn\'t load the playlist.',
buttons: [{ text: 'Ok', role: 'cancel' }]
}).then(alert => {
alert.present();
});
}
});
}