Size: a a a

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

2020 February 04

YK

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

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
https://angular.io/guide/reactive-forms#displaying-a-form-control-value
В доках очень мало сказано про valueChanges почему-то, но в общих чертах - это observable изменения формы
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
источник этого потока - библиотечка ng-infinite-scroll
источник

DB

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

YK

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

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
источник этого потока - библиотечка ng-infinite-scroll
https://www.npmjs.com/package/ngx-infinite-scroll
Вы про эту? Я тут что-то не вижу обзёрвблов
источник

YK

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

YK

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

YK

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

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
ну, у нее же scrolled - это EventEmitter
Сейчас попробую вам каркас собрать
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
событие scroll должно scan’ом увеличиваться каждый раз на один и сбрасываться в ноль если срабатывают наши фильтры-сортировка-поиск
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
событие scroll должно scan’ом увеличиваться каждый раз на один и сбрасываться в ноль если срабатывают наши фильтры-сортировка-поиск
private results = this.form.valueChanges.pipe(switchMap(params => this.newResults(params)))

newResults(params) {
 return this.scrolled.pipe(
   startWith(0),
   mergeMap(() =>  this.request(params, page)),
   scan((acc, response) => acc.concat(response), [])
 )
}


Это прям совсем псевдо-код, что бы суть донести
источник

YK

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

YK

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

YK

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

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
которые combineLatest с моими valueChanges
Именно
источник

YK

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

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Dilame Bowzee
private results = this.form.valueChanges.pipe(switchMap(params => this.newResults(params)))

newResults(params) {
 return this.scrolled.pipe(
   startWith(0),
   mergeMap(() =>  this.request(params, page)),
   scan((acc, response) => acc.concat(response), [])
 )
}


Это прям совсем псевдо-код, что бы суть донести
гм, а где у нас page инкрементируется?
источник

DB

Dilame Bowzee in Angular - русскоговорящее сообщество
Yuri Katkov
гм, а где у нас page инкрементируется?
Можно поставить ещё один скан после startWith
источник

YK

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