Угловое 4 кеширование
Проблема:
Я должен отображать большое количество данных
Используйте нумерацию страниц, которая может изменить количество (пользователь может выбрать отображение 10 / 20 /50 на страницу)
Пытался использовать rxjs по следующей ссылке https://blog.thoughtram.io/angular/2018/03/05/advanced-caching-with-rxjs.html
Но у меня есть 2 проблемы, используя это....
4.1. Это дает последние данные, но мне нужно отобразить данные для этой конкретной страницы, а также отобразить их, когда я вернусь снова
4.2. Я использую поиск сверху, который требует, чтобы я использовал все данные, но так как это кэширование получает данные поэтапно, у меня возникнет проблема, когда пользователь выполняет поиск до того, как полные данные извлекаются из серверной службы...
Пожалуйста, предложите лучший способ решить эту проблему....
1 ответ
RXJS субъекты имеют 3 различных типа кормов, насколько
1) if you miss it you miss it = Subject
2) give me the last value = BehaviorSubject
3) give me all the last values = ReplaySubject
Похоже, вы ищете № 3 правильно? Если это так, просто посмотрите на ReplaySubjects.
Тема - подписчик получит только опубликованные значения, которые были отправлены после подписки.
BehaviorSubject - последнее значение кэшируется. Подписчик получит последнее значение при первоначальной подписке.
ReplaySubject - может кешировать до указанного количества выбросов. Любые подписчики получат все кэшированные значения при подписке.
import * as Rx from "rxjs";
const subject = new Rx.ReplaySubject(2, 100);
// subscriber 1
subject.subscribe((data) => {
console.log('Subscriber A:', data);
});
setInterval(() => subject.next(Math.random()), 200);
// subscriber 2
setTimeout(() => {
subject.subscribe((data) => {
console.log('Subscriber B:', data);
});
}, 1000)
Мы создаем ReplaySubject и указываем, что мы хотим хранить только последние 2 значения, но не более 100 мс. Мы начинаем испускать значения Subject каждые 200 мс. Подписчик А подберет это и зарегистрирует каждое значение, которое испускает Субъект. Мы начинаем подписку с подписчиком B, но делаем это через 1000 мс. Это означает, что субъект уже выпустил 5 значений, прежде чем мы начнем подписку. Когда мы создали тему, мы указали, что хотим сохранить максимум 2 значения, но не более 100 мс. Это означает, что через 1000 мс, когда подписчик B начнет подписку, он будет получать только 1 значение, поскольку субъект выдает значения каждые 200 мс.