Size: a a a

Angular - русскоговорящее сообщество

2020 February 04

YK

Yuri Katkov in Angular - русскоговорящее сообщество
подскажите хороший мануал по реактивному стилю в ангуляре
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
шоб блин все было потоками, и в конце один субскрайб - и тот в async-pipe
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
у меня вот почти идеальный CRSSFUD (create read, search, sort by, filter, update, delete), тока еще с бесконечным скроллом
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
я вот так думаю:
1. Есть поток поиска, параметризуется значениями фильтра, направлением и полем сортировки, плюс еще каким-то хитрым финтом чтобы была бесконечная прокрутка, ненавижу ее.
2. Добавление, обновление и удаление объекта должно заставлять поток поиска делать новый запрос с его текущими параметрами.
3. изменение фильтров и сортировки приводит к выстреливанию их обсерваблов, которые опять-таки заставляют поток поиска делать новый запрос и все перерисовывать по-новой
4. скролл тоже вызывает новый запрос, но результаты конкатенируются к существующим, а не заменяют оные.
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Yuri Katkov
у меня вот почти идеальный CRSSFUD (create read, search, sort by, filter, update, delete), тока еще с бесконечным скроллом
твоя задача просто сделать так что б на каждый юзер екшн поток менялся
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Попробуй через EventBus
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
я вот так думаю:
1. Есть поток поиска, параметризуется значениями фильтра, направлением и полем сортировки, плюс еще каким-то хитрым финтом чтобы была бесконечная прокрутка, ненавижу ее.
2. Добавление, обновление и удаление объекта должно заставлять поток поиска делать новый запрос с его текущими параметрами.
3. изменение фильтров и сортировки приводит к выстреливанию их обсерваблов, которые опять-таки заставляют поток поиска делать новый запрос и все перерисовывать по-новой
4. скролл тоже вызывает новый запрос, но результаты конкатенируются к существующим, а не заменяют оные.
Сомневаюсь, что есть конкретно такой мануал для ангуляра, судя по вопросу всё выглядит так, будто надо курить именно RxJS.
По пунктам -
1) Поле поиска, фильтр, сортировка - простая реактивная форма. Создаешь FormGroup, вешаешь valueChanges - профит. Пускай это будет одним из триггеров для нового запроса.
2) И это тоже просто триггер для нового запроса.
3) То же самое, что и 1.
4) Ну тут уже просто дело техники. Не знаю, причём тут реактивность.

В итоге все триггеры собираешь с помощью combineLatest, подписываешься  делаешь свои запросы
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Dilame Bowzee
Сомневаюсь, что есть конкретно такой мануал для ангуляра, судя по вопросу всё выглядит так, будто надо курить именно RxJS.
По пунктам -
1) Поле поиска, фильтр, сортировка - простая реактивная форма. Создаешь FormGroup, вешаешь valueChanges - профит. Пускай это будет одним из триггеров для нового запроса.
2) И это тоже просто триггер для нового запроса.
3) То же самое, что и 1.
4) Ну тут уже просто дело техники. Не знаю, причём тут реактивность.

В итоге все триггеры собираешь с помощью combineLatest, подписываешься  делаешь свои запросы
4. в предыдущие мои попытки такое сделать, это было самое сложное, ведь если у нас в шаблоне что-то типа {{results|async}}, то results должен в себе содержать все элементы, подлежащие отображению
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
4. в предыдущие мои попытки такое сделать, это было самое сложное, ведь если у нас в шаблоне что-то типа {{results|async}}, то results должен в себе содержать все элементы, подлежащие отображению
А в чём проблема положить туда все элементы?)

https://rxjs-dev.firebaseapp.com/api/operators/scan
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Dilame Bowzee
А в чём проблема положить туда все элементы?)

https://rxjs-dev.firebaseapp.com/api/operators/scan
ну, я доскроллил до 6й страницы, а юзер поменял фильтры
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
значит нужно results обнулить, и запрашиваемую страницу поиска тоже обнулить
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
ну, я доскроллил до 6й страницы, а юзер поменял фильтры
Смена фильтров должна делать switchMap
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
я понимаю
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
combineLatest(фильтры, сортировка, поисковая строка) | switchMap(поиск)  - тут все ясно
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
я понимаю
Смотрите, всё начинается с потока, который эмитит параметры по дефолту (пустая строка поиска, сортировка, фильтр).
Эти параметры по пайплану попадают в switchMap(), который возвращает поток, содержащий в себе scan и реакцию на скролл.
Это в общих чертах. Могу помочь более конкретно, если есть более конкретный вопрос
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
а, кажется понял, то бишь номер страницы не должен быть в нашем combineLatest
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Вот, в итоге этот поток отдаёт results, на который вы и подписываетесь в шаблоне
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
а, кажется понял, то бишь номер страницы не должен быть в нашем combineLatest
Если поиск, фильтр и сортировка = 1 FormGroup, то тут даже combineLatest не нужен
источник