Size: a a a

2021 April 02

J

Jack in Angular Kyiv
источник

J

Jack in Angular Kyiv
Це правильно робиш?
источник

VG

Valeriy Garbuzov in Angular Kyiv
Jack
Це правильно робиш?
дякую за відгук!!

так.

const controlArray = this.form.get('control') as FormArray
const item = createItem()
controlArray.push(item) // works fine!

someObservable.subscribe(() => {
 controlArray.push(item) // does not work! :(
})
источник

D

Dima in Angular Kyiv
тобто до кліку на форму не відображається доданий контрол (у вигляді інпуту чи типу того)?
источник

VG

Valeriy Garbuzov in Angular Kyiv
Dima
тобто до кліку на форму не відображається доданий контрол (у вигляді інпуту чи типу того)?
так. у випадку, якшо оновити в сабскрайб обсьорвобла.

А якшо без обсьорвобла пушнути - все ок 🤷‍♂️

Мабуть якийсь "проблемний" обсьорвабл, але також не можу придумати куди копати..

Дякую за відгук!
источник

D

Dima in Angular Kyiv
Valeriy Garbuzov
дякую за відгук!!

так.

const controlArray = this.form.get('control') as FormArray
const item = createItem()
controlArray.push(item) // works fine!

someObservable.subscribe(() => {
 controlArray.push(item) // does not work! :(
})
я так розумію controlArray === control?
источник

SF

Sasha Fesenko in Angular Kyiv
Valeriy Garbuzov
так. у випадку, якшо оновити в сабскрайб обсьорвобла.

А якшо без обсьорвобла пушнути - все ок 🤷‍♂️

Мабуть якийсь "проблемний" обсьорвабл, але також не можу придумати куди копати..

Дякую за відгук!
Що маєте на увазі сабскрайб обсорвобла? Як він до форми відноситься?
источник

SF

Sasha Fesenko in Angular Kyiv
Valeriy Garbuzov
дякую за відгук!!

так.

const controlArray = this.form.get('control') as FormArray
const item = createItem()
controlArray.push(item) // works fine!

someObservable.subscribe(() => {
 controlArray.push(item) // does not work! :(
})
А, тепер бачу, вибачаюсь
источник

J

Jack in Angular Kyiv
Щось типу ngZone.run теж не помагає?
источник

J

Jack in Angular Kyiv
Хтось на stackoverflow писав що в нього були трабли з ngFor і  FormArray і йому trackBy помогло
источник

VG

Valeriy Garbuzov in Angular Kyiv
Dima
я так розумію controlArray === control?
ой, очєпятка. поправив. так
источник

J

Jack in Angular Kyiv
Ще пишуть що є трабли з нестед formGroup - можливо там з цим якісь трабли
https://github.com/angular/angular/issues/21528#issuecomment-357532013
источник

VG

Valeriy Garbuzov in Angular Kyiv
Jack
Щось типу ngZone.run теж не помагає?
поресьорчу в цьому напрямку, дякую за варіант.
Ще не доводилось напряму з зоною працювати :)
источник

VG

Valeriy Garbuzov in Angular Kyiv
Перевірив на of(), моя поблема репродюситься

(якщо закоментувати блок з обсьорваблом - все ок, якщо закоментувати блок вище - форма (вьюшка) оновиться тільки після тачу по ній)

Сам компонент, де рендериться FormArray є чайлдом даного компонента (якщо це має значення)

Стратегія ченждетекту - OnPush, але перевіряв на дефолтній - така само поведінка (ставив дефолт і паренту і чайлду)
источник

VG

Valeriy Garbuzov in Angular Kyiv
[UPD]

В общєм, якшо дьорнути detectChange() то все працює прогнозовано.

Висновок, проблема у "моєму" обсьорвабл.

Буду шукати там проблему, але це вже напрямок.

Дякую ще раз всім небайдужим.

Вдалих вихідних!

[UPD2]

працює у випадку ChangeDetectionStrategy.Default у чайлда (де цей FormArray рендериться).

Я вважав що детект запускається і по всім чайлдам і не врахував що FormArray передається через @Input (і звісно не оновлюється на нього посилання)

Наразі таке рішення підійде, але з +1 таскою в техборг.
источник
2021 April 03

DG

Danil Gudz in Angular Kyiv
Valeriy Garbuzov
[UPD]

В общєм, якшо дьорнути detectChange() то все працює прогнозовано.

Висновок, проблема у "моєму" обсьорвабл.

Буду шукати там проблему, але це вже напрямок.

Дякую ще раз всім небайдужим.

Вдалих вихідних!

[UPD2]

працює у випадку ChangeDetectionStrategy.Default у чайлда (де цей FormArray рендериться).

Я вважав що детект запускається і по всім чайлдам і не врахував що FormArray передається через @Input (і звісно не оновлюється на нього посилання)

Наразі таке рішення підійде, але з +1 таскою в техборг.
Все из-за онпуш, по матчасти чейндж детекшн не отрабатывает в онпуш компоненте если не поменялся инпут или не произошло дом ивента, нужно делать markForCheck в сабскрайбе чтоб чейндж детекшн отработал
источник

VG

Valeriy Garbuzov in Angular Kyiv
mark також не працював (писав про це в першому повідомленні).

Я вважав, шо дьорнувши detect/mark з парента гарантовано оновить всіх чайлдів (навіть якщо і вони в onPush.

Спрацювала лише комба "детект" в парень + Default strategy в чайлд (або замість cdr.detectChange можна формі переаплаїти FormArray масив значень).

Не знайшов поки шо рішень аби чайлда лишити в OnPush (але вже і не шукав, пізніше на свіжу голову можна буде повернутись до цього питання).
источник

AC

Alex Chugaev in Angular Kyiv
Переслано от Dima Kolodko
источник
2021 April 04

АА

Андрей Андрей... in Angular Kyiv
Всем привет
источник

АА

Андрей Андрей... in Angular Kyiv
Кто готов помочь с тестовым(не бесплатно)
источник