Size: a a a

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

2021 February 22

AB

Alex Bu in Angular - русскоговорящее сообщество
Vitaly Vasilega
Задам еще раз, может кто увидит. Подскажите, может кто сталкивался с такой задачей. Есть форма, реализованная реактивным образом и большое количество контролов, которые подключены к FormGroup, через formControlName. Так же есть код, который делает какую-то работу, когда форма меняется (form.valueChanges.subscribe(...)). Вопрос вот какой. На изменения в некоторых контролах надо реагировать сразу (с этим проблем нет и это нормальное поведение, когда ты подписываешь к изменению в FormGroup), а вот другие контролы, должны вызывать изменения в FormGroup с заданным DebounceTime. Т.е. для примера: есть контрол name, и когда я ввожу в нём что-то, то он не должен моментально заставлять обновляться FormGroup и кидать изменения в виде изменений для valueChanges. Это можно легко написать для отдельного контрола применив в pipe оператор debounceTime. Но как такое поведение сделать, когда контрол работает совместно с FormGroup не совсем понятно.Кто-то делал что-то подобное? Спасибо
Мне пришла идея объединить контролы, с которыми нужно работать как с пакетами, в отдельную формГруппу и поместить её внутри глобальной формГруппы, например,

globalFg = new FormGroup({
 globalCtrl1: new FormControl(),
  localFg: new FormGroup({
     localCtrl1: new FormControl()
})
});

Тогда можно будет подписаться на специальную группу контролов через this.globalFg.get('localFg).valueChanges.subscribe()
источник

VV

Vitaly Vasilega in Angular - русскоговорящее сообщество
интересная задумка, надо подумать, может получится её развить. Я не писал, что контролы еще и динамически добавляются и удаляются. 😌 Но за идею спасибо
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Vitaly Vasilega
думал об этом, но форма большая, контролов много, перечислять их - так себе. Думал о директиве, которую можно было бы навешать на нужный контрол, но таких решений не нашёл. Возможно, что это нереально. Нужно копаться в исходниках formControlName смотреть весь стек, как formGroup засекает изменения, возможно тогда появится какая-то идея....
Вообще, вы можете просто на нужных виджетах повесить (ngModelChange) и вызывать нужные обработчики. Принцип будет примерно такой же как и с подпиской на вельюЧенджз
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Vitaly Vasilega
интересная задумка, надо подумать, может получится её развить. Я не писал, что контролы еще и динамически добавляются и удаляются. 😌 Но за идею спасибо
Их в динамике можно паковать в формГруппу, а потом добавить в глобальнуюФорм группу. Если из локальной формГруппы нет потребности иметь доступ к глобальнойФормгруппе, то можно вообще её туда не добавлять)
источник

`

` in Angular - русскоговорящее сообщество
у меня есть родительский компонент и в этом компоненте есть 5 детей и у этих детей есть асинхронные дейсвтие (загрузка с апи) как мне поймать момент в родительском компоненте тип загрузились все дети со своими асинхронными
источник

`

` in Angular - русскоговорящее сообщество
мои детишки
источник

`

` in Angular - русскоговорящее сообщество
ngafterviewinit не получится
а ngafterchecked он много раз вызывается
источник

VV

Vitaly Vasilega in Angular - русскоговорящее сообщество
возможные подходы: Каждый ребёнок кидает событие, которое ловит родитель и как-то с ними работает. Второй вариант, всё это протянуть через как-то сервис
источник

`

` in Angular - русскоговорящее сообщество
я щас делал поймал момент с таким способом
но что если данные будут еще дольше грузится
источник

`

` in Angular - русскоговорящее сообщество
Vitaly Vasilega
возможные подходы: Каждый ребёнок кидает событие, которое ловит родитель и как-то с ними работает. Второй вариант, всё это протянуть через как-то сервис
как сервис норм звучит
источник

`

` in Angular - русскоговорящее сообщество
я бы хотел первый вариант но мне нужен чтоб они все загрузились чтоб я поставил свой keepscroll
источник

VV

Vitaly Vasilega in Angular - русскоговорящее сообщество
Родитель может контролировать это. В начале, когда child компонент проинициализировался, он может кинуть событие =>initialized, а когда закончил загрузку => Finished и написав несложный код, можно контролировать сколько компонентов есть, и сколько должно загрузиться, чтобы сделать keepscroll.
источник

VV

Vitaly Vasilega in Angular - русскоговорящее сообщество
Для этого можно создать в родителе BehaviorSubject<[number, number]>([0,0])
источник

`

` in Angular - русскоговорящее сообщество
хорошо спасибо вам большое
источник

VV

Vitaly Vasilega in Angular - русскоговорящее сообщество
Это один из вариантов, но можно всё это вынести в сервис. А возможно, что-то другое предложат. ))
источник

`

` in Angular - русскоговорящее сообщество
О нет у нас в проекте не юзают рхджс
источник

`

` in Angular - русскоговорящее сообщество
тимлид говорит что рхджс умрет скоро
источник

VV

Vitaly Vasilega in Angular - русскоговорящее сообщество
😂
источник

VV

Vitaly Vasilega in Angular - русскоговорящее сообщество
Откуда такая информация?
источник

`

` in Angular - русскоговорящее сообщество
хз
источник