Size: a a a

Советский Angular

2021 March 06

IE

Igor' Ember in Советский Angular
    protected valueChanges<T>(
       form: FormGroup
   ): Observable<T> {
       return concat(
           defer(() => of(form.value)),
           form.valueChanges
       );
   }

👀
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Igor' Ember
    protected valueChanges<T>(
       form: FormGroup
   ): Observable<T> {
       return concat(
           defer(() => of(form.value)),
           form.valueChanges
       );
   }

👀
лучше написать AbstractControl, потому что это даст возможность принять и FormGroup, и FormControl и FormArray
источник

IE

Igor' Ember in Советский Angular
Вертихвост キバ 🏡🦊
лучше написать AbstractControl, потому что это даст возможность принять и FormGroup, и FormControl и FormArray
Просто почему-то не работает. Пытаюсь понять, почему.
concat нужно импортировать из  rxjs/operators или просто 'rxjs' ?
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Igor' Ember
Просто почему-то не работает. Пытаюсь понять, почему.
concat нужно импортировать из  rxjs/operators или просто 'rxjs' ?
из rxjs
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
defer и of тоже из rxjs
источник

IE

Igor' Ember in Советский Angular
Ну да, я так и делаю, но почему-то значения формы в distinctUntillChanged всё равно не отличаются (предыдущее от текущего). Предыдущее просто получает сразу значение текущего и из-за этого компаратор не отрабатывает правильно
источник

IE

Igor' Ember in Советский Angular
    ngOnInit(): void {
       const { currentUser } = this.usersService;
       this.itemsService.getItems(currentUser)
           .subscribe(items => {
               this.form = new FormGroup({
                   entities: new FormArray(
                       items.map(
                           item => {
                               return new FormControl({...});
                           }
                       )
                   )
               });
               const initial: IEntities = {
                   entities: ...
               };
               
               this.valueChanges<IEntities>(this.form)
                   .pipe(
                       startWith(initial),
                       debounceTime(800),
                       distinctUntilChanged(this.isFormValueChanged)
                   )
                   .subscribe((formValue: IEntities) => {
                       console.log('formValue: ', formValue);
                   });
           });
   }
источник

IE

Igor' Ember in Советский Angular
(нет, контекст у isFormValueChanged не потерялся)
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Igor' Ember
    ngOnInit(): void {
       const { currentUser } = this.usersService;
       this.itemsService.getItems(currentUser)
           .subscribe(items => {
               this.form = new FormGroup({
                   entities: new FormArray(
                       items.map(
                           item => {
                               return new FormControl({...});
                           }
                       )
                   )
               });
               const initial: IEntities = {
                   entities: ...
               };
               
               this.valueChanges<IEntities>(this.form)
                   .pipe(
                       startWith(initial),
                       debounceTime(800),
                       distinctUntilChanged(this.isFormValueChanged)
                   )
                   .subscribe((formValue: IEntities) => {
                       console.log('formValue: ', formValue);
                   });
           });
   }
startWith теперь не нужен

и что в isFormValueChanged?
источник

IE

Igor' Ember in Советский Angular
Вертихвост キバ 🏡🦊
startWith теперь не нужен

и что в isFormValueChanged?
там
protected isFormValueChanged = (prevs, currs) => {
 let hasntChanged = true;
 for (let i = 0; i < prevs.entites.length; i++) {
   const prev = prevs.entities[i];
   const curr = currs.entities[i];
   if (prev.value !== curr.value) {
       hasntChanged = false;
       break;
   }
 }
 return hasntChanged;
}
источник

IE

Igor' Ember in Советский Angular
Вертихвост キバ 🏡🦊
startWith теперь не нужен

и что в isFormValueChanged?
startWith  убрала, но результат тот же
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Igor' Ember
там
protected isFormValueChanged = (prevs, currs) => {
 let hasntChanged = true;
 for (let i = 0; i < prevs.entites.length; i++) {
   const prev = prevs.entities[i];
   const curr = currs.entities[i];
   if (prev.value !== curr.value) {
       hasntChanged = false;
       break;
   }
 }
 return hasntChanged;
}
Для начала, я думаю, что return hasntChanged; должно было быть после фигурной скобочки
источник

IE

Igor' Ember in Советский Angular
Вертихвост キバ 🏡🦊
Для начала, я думаю, что return hasntChanged; должно было быть после фигурной скобочки
оно после. Это здесь опечаталась
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Igor' Ember
там
protected isFormValueChanged = (prevs, currs) => {
 let hasntChanged = true;
 for (let i = 0; i < prevs.entites.length; i++) {
   const prev = prevs.entities[i];
   const curr = currs.entities[i];
   if (prev.value !== curr.value) {
       hasntChanged = false;
       break;
   }
 }
 return hasntChanged;
}
а если аргументам проставить типы явно prevs: IEntities, currs: IEntities, то никаких ошибок не будет подсвечено?
источник

IE

Igor' Ember in Советский Angular
Вертихвост キバ 🏡🦊
а если аргументам проставить типы явно prevs: IEntities, currs: IEntities, то никаких ошибок не будет подсвечено?
явно прописаны, я просто здесь упростила
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Igor' Ember
явно прописаны, я просто здесь упростила
сможешь сделать stackblitz, чтобы можно было потыкать проблему?
источник

IE

Igor' Ember in Советский Angular
Вертихвост キバ 🏡🦊
сможешь сделать stackblitz, чтобы можно было потыкать проблему?
попробую
источник

IE

Igor' Ember in Советский Angular
Вертихвост キバ 🏡🦊
сможешь сделать stackblitz, чтобы можно было потыкать проблему?
Ну вот что-то похожее, только там почему-то форма не хочется биндиться на formGroup, хотя у меня работает всё...
https://stackblitz.com/edit/angular-ivy-bh4fn5?file=src/app/app.component.ts
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Igor' Ember
Ну вот что-то похожее, только там почему-то форма не хочется биндиться на formGroup, хотя у меня работает всё...
https://stackblitz.com/edit/angular-ivy-bh4fn5?file=src/app/app.component.ts
ReactiveFormsModule не подключен был)
источник

IE

Igor' Ember in Советский Angular
аа, точно
источник