Size: a a a

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

2020 April 23

ИЗ

Иван Завальнич... in Angular - русскоговорящее сообщество
у меня есть formControlName
источник

AS

Anton Shvets in Angular - русскоговорящее сообщество
я вижу только <input  type="number" [(value)]="value" numbersOnly/>
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
Smooth Operator
да, все зависимость надо мокать
Извиняюсь, но еще вопрос, если можно )

Я замокал таким образом все зависимости

 const MockedMatDialog = mock(MatDialog);
 const MockedUserService = mock(UserService);
 const MockedCalendarService = mock(CalendarService);
 const MockedGlobalService = mock(GlobalService);
 const MockedImageChecker = mock(ImageChecker);


В провайдерах указал:


providers: [
       {
         provide: MatDialog,
         useValue: instance(MockedMatDialog),
       },
       {
         provide: UserService,
         useValue: instance(MockedUserService),
       },
       {
         provide: CalendarService,
         useValue: instance(MockedCalendarService),
       },
       {
         provide: GlobalService,
         useValue: instance(MockedGlobalService),
       },
       {
         provide: ImageChecker,
         useValue: instance(MockedImageChecker),
       },
     ]
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
Oleksandr Nikolskyi
Извиняюсь, но еще вопрос, если можно )

Я замокал таким образом все зависимости

 const MockedMatDialog = mock(MatDialog);
 const MockedUserService = mock(UserService);
 const MockedCalendarService = mock(CalendarService);
 const MockedGlobalService = mock(GlobalService);
 const MockedImageChecker = mock(ImageChecker);


В провайдерах указал:


providers: [
       {
         provide: MatDialog,
         useValue: instance(MockedMatDialog),
       },
       {
         provide: UserService,
         useValue: instance(MockedUserService),
       },
       {
         provide: CalendarService,
         useValue: instance(MockedCalendarService),
       },
       {
         provide: GlobalService,
         useValue: instance(MockedGlobalService),
       },
       {
         provide: ImageChecker,
         useValue: instance(MockedImageChecker),
       },
     ]
Но ошибка та же (

StaticInjectorError(DynamicTestModule)[UsersComponent -> MatDialog]:
     StaticInjectorError(Platform: core)[UsersComponent -> MatDialog]:
       NullInjectorError: No provider for MatDialog!
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
Не понимаю, почему оно выдает  NullInjectorError: No provider for MatDialog!...... ведь я его записываю в провайдеры
источник

R

Rafael in Angular - русскоговорящее сообщество
у кого нибудь были сложности со срабатыванием formgroup.markAsTouched()?  применяю, валидационные месаги не выскакиывают
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
Oleksandr Nikolskyi
Но ошибка та же (

StaticInjectorError(DynamicTestModule)[UsersComponent -> MatDialog]:
     StaticInjectorError(Platform: core)[UsersComponent -> MatDialog]:
       NullInjectorError: No provider for MatDialog!
странно
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Rafael
у кого нибудь были сложности со срабатыванием formgroup.markAsTouched()?  применяю, валидационные месаги не выскакиывают
markAllAsTouched ?
источник

R

Rafael in Angular - русскоговорящее сообщество
Dmitry Teplov
markAllAsTouched ?
тоже не срабатывает
источник

R

Rafael in Angular - русскоговорящее сообщество
this.FormService.personalFormGroup.controls.surname.markAsTouched();
     this.FormService.personalFormGroup.controls.surname.markAsDirty();
     this.FormService.personalFormGroup.controls.surname.updateValueAndValidity();
вот так сработало
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Rafael
тоже не срабатывает
updateValueAndValidityRecursively(
   control: AbstractControl,
   opts: { emitEvent?: boolean } = { emitEvent: true },
 ): void {
   let forEachFn: ForEachFunction = null;
   if (control instanceof FormArray) {
     forEachFn = forEachFormArrayChild;
   } else if (control instanceof FormGroup) {
     forEachFn = forEachFormGroupChild;
   }

   if (forEachFn !== null) {
     forEachFn.call(control, (ctrl: AbstractControl) => updateValueAndValidityRecursively(ctrl, opts));
   }

   control.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });
 }
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Dmitry Teplov
updateValueAndValidityRecursively(
   control: AbstractControl,
   opts: { emitEvent?: boolean } = { emitEvent: true },
 ): void {
   let forEachFn: ForEachFunction = null;
   if (control instanceof FormArray) {
     forEachFn = forEachFormArrayChild;
   } else if (control instanceof FormGroup) {
     forEachFn = forEachFormGroupChild;
   }

   if (forEachFn !== null) {
     forEachFn.call(control, (ctrl: AbstractControl) => updateValueAndValidityRecursively(ctrl, opts));
   }

   control.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });
 }
ну и дёрнуть с фг

this.fg.markAllAsTouched();
updateValueAndValidityRecursively(this.fg);
источник

R

Rafael in Angular - русскоговорящее сообщество
благдарю
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Rafael
благдарю
забыл ещё
type ForEachFunction = (cb: (v: any, k: string | number) => void) => void;

function forEachFormGroupChild(this: FormGroup, cb: (v: any, k: string) => void): void {
 Object.keys(this.controls).forEach(k => cb(this.controls[k], k));
}

function forEachFormArrayChild(this: FormArray, cb: (v: any, k: number) => void): void {
 this.controls.forEach((control: AbstractControl, index: number) => {
   cb(control, index);
 });
}
источник

DT

Dmitry Teplov in Angular - русскоговорящее сообщество
Rafael
благдарю
https://github.com/angular/angular/blob/9.0.0/packages/forms/src/model.ts#L638-L641
либо дёрнуть приватное апи ангуляра



dangerousUpdateValueAndValidityRecursively(
   control: AbstractControl,
   opts: { emitEvent?: boolean } = { emitEvent: true },
 ): void {
   (control as any)._updateTreeValidity(opts);
 }
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
Smooth Operator
странно
Может где-то в другом месте ошибка? (чисто один файл перекинул)

https://codesandbox.io/s/elegant-noether-4v83w?file=/src/app/a.ts
источник

DT

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

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
ааа
источник

ON

Oleksandr Nikolskyi in Angular - русскоговорящее сообщество
секунду
источник

ON

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