Size: a a a

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

2021 March 24

К

Корочка хлеба... in Angular - русскоговорящее сообщество
Кто может подсказать, а почему в Мозиеле нельзя редактировать JS код и как это исправить?
источник

ЕУ

Евгений Удалов... in Angular - русскоговорящее сообщество
Mykhailo Pashchenko
Добрый день! Вопрос насчет валидации в ангуляре.
Мне нужно проверять  уникальность вводимого юзернейма. Для этого я написал следующий валидатор, который отправлял запрос на бэкэнд при вводе нового символа:
  public static adminValidator(adminService: AdminUserService): AsyncValidatorFn | any {
   return async (control: AbstractControl) => {
     const username = control?.value;
     let unique = await adminService.isUsernameUnique(username);
     return !unique;
   }
 }


Это работает. Я захотел добавить задержку в 300мс перед отправкой запроса, начал добавлять дебаунсер, в итоге валидатор отрабатывает только один раз - при создании формы, и больше не срабатывает. Подскажите, что я сделал не так?

  public static adminUserUniqueValidator(adminService: AdminUserService): AsyncValidatorFn {
   return control => control.valueChanges
     ?.pipe(
       debounceTime(300),
       distinctUntilChanged(),
       switchMap((value: string) => adminService.isUsernameUnique(value)),
       map((unique: boolean) =>
         unique ? null : {'usernameUniquenessViolated': true}
         ),
       first());
 }
1) что-то мне подсказывает, что тут first() не спроста. 2) debounceTime юзай в компоненте, а не в валидаторе. хотя может и в валидаторе норм
источник

M

Maksim in Angular - русскоговорящее сообщество
Mykhailo Pashchenko
Добрый день! Вопрос насчет валидации в ангуляре.
Мне нужно проверять  уникальность вводимого юзернейма. Для этого я написал следующий валидатор, который отправлял запрос на бэкэнд при вводе нового символа:
  public static adminValidator(adminService: AdminUserService): AsyncValidatorFn | any {
   return async (control: AbstractControl) => {
     const username = control?.value;
     let unique = await adminService.isUsernameUnique(username);
     return !unique;
   }
 }


Это работает. Я захотел добавить задержку в 300мс перед отправкой запроса, начал добавлять дебаунсер, в итоге валидатор отрабатывает только один раз - при создании формы, и больше не срабатывает. Подскажите, что я сделал не так?

  public static adminUserUniqueValidator(adminService: AdminUserService): AsyncValidatorFn {
   return control => control.valueChanges
     ?.pipe(
       debounceTime(300),
       distinctUntilChanged(),
       switchMap((value: string) => adminService.isUsernameUnique(value)),
       map((unique: boolean) =>
         unique ? null : {'usernameUniquenessViolated': true}
         ),
       first());
 }
источник

MP

Mykhailo Pashchenko in Angular - русскоговорящее сообщество
Всем спасибо, почитаю!
источник

ОК

Олеся Климентьева... in Angular - русскоговорящее сообщество
Добрый день, а сюда можно вакансию выставить?
источник

VM

Vadim Malovaniy in Angular - русскоговорящее сообщество
Олеся Климентьева
Добрый день, а сюда можно вакансию выставить?
источник

SP

Saint P in Angular - русскоговорящее сообщество
Всем привет. Подскажите пожалуйста, как собрать данные с формы по клику, если у меня вот такая форма:
addUserForm = new FormGroup({
   companies: new FormArray([
     new FormGroup({
       companyName: new FormControl(),
       contractNumber: new FormControl()
     })
   ]),
   emailAgreement: new FormControl(),
   phoneNumberAgreement: new FormControl(),
   profileInfo: new FormGroup({
     email: new FormControl(),
     firstName: new FormControl(),
     patronymic: new FormControl(),
     workPhone: new FormControl(),
     workPhoneAdd: new FormControl(),
     birthDate: new FormControl(),
     surname: new FormControl(),
     phone: new FormControl()
   })
 })
пытался сделать таким образом, но не получается:
const addProfile = {
       companies: [
         {
           companyName: this.addUserForm.value.companyName,
           contractNumber: this.addUserForm.value.companies.contractNumber
         }
       ],
       emailAgreement: this.addUserForm.value.emailAgreement,
       phoneNumberAgreement: this.addUserForm.value.phoneNumberAgreement,
       profileId: null,
       profileInfo: {
         email: this.addUserForm.value.profileInfo.email,
         firstName: this.addUserForm.value.profileInfo.firstName,
         patronymic: this.addUserForm.value.profileInfo.patronymic,
         workPhone: this.addUserForm.value.profileInfo.workPhone,
         workPhoneAdd: this.addUserForm.value.profileInfo.workPhoneAdd,
         birthDate: this.addUserForm.value.profileInfo.birthDate,
         surname: this.addUserForm.value.profileInfo.surname,
         phone: this.addUserForm.value.profileInfo.phone
       }
     };
источник

VM

Vadim Malovaniy in Angular - русскоговорящее сообщество
Saint P
Всем привет. Подскажите пожалуйста, как собрать данные с формы по клику, если у меня вот такая форма:
addUserForm = new FormGroup({
   companies: new FormArray([
     new FormGroup({
       companyName: new FormControl(),
       contractNumber: new FormControl()
     })
   ]),
   emailAgreement: new FormControl(),
   phoneNumberAgreement: new FormControl(),
   profileInfo: new FormGroup({
     email: new FormControl(),
     firstName: new FormControl(),
     patronymic: new FormControl(),
     workPhone: new FormControl(),
     workPhoneAdd: new FormControl(),
     birthDate: new FormControl(),
     surname: new FormControl(),
     phone: new FormControl()
   })
 })
пытался сделать таким образом, но не получается:
const addProfile = {
       companies: [
         {
           companyName: this.addUserForm.value.companyName,
           contractNumber: this.addUserForm.value.companies.contractNumber
         }
       ],
       emailAgreement: this.addUserForm.value.emailAgreement,
       phoneNumberAgreement: this.addUserForm.value.phoneNumberAgreement,
       profileId: null,
       profileInfo: {
         email: this.addUserForm.value.profileInfo.email,
         firstName: this.addUserForm.value.profileInfo.firstName,
         patronymic: this.addUserForm.value.profileInfo.patronymic,
         workPhone: this.addUserForm.value.profileInfo.workPhone,
         workPhoneAdd: this.addUserForm.value.profileInfo.workPhoneAdd,
         birthDate: this.addUserForm.value.profileInfo.birthDate,
         surname: this.addUserForm.value.profileInfo.surname,
         phone: this.addUserForm.value.profileInfo.phone
       }
     };
просто используй this.addUserForm.value. Там все значение из формы. и не нужно их переприсваивать
источник

SP

Saint P in Angular - русскоговорящее сообщество
Vadim Malovaniy
просто используй this.addUserForm.value. Там все значение из формы. и не нужно их переприсваивать
Как раз только что разобрался, спасибо большое
источник

M

Maksim in Angular - русскоговорящее сообщество
реализовал свой MatFormFieldControl, внутри которого mat-chips + mat-autocomplete. Но панель mat-autocomplete привязывается ни к тому контейнеру. Как это лучше всего решить?
источник

M

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

M

Maksim in Angular - русскоговорящее сообщество
должно быть так
источник

S

SR in Angular - русскоговорящее сообщество
Всем привет!

Как тут полям обьекта Candidate присвоить альтернативное значение как у поле выше?
источник

ЕУ

Евгений Удалов... in Angular - русскоговорящее сообщество
SR
Всем привет!

Как тут полям обьекта Candidate присвоить альтернативное значение как у поле выше?
видимо, как у поля выше и присваивай )
источник

VM

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

S

SR in Angular - русскоговорящее сообщество
Евгений Удалов
видимо, как у поля выше и присваивай )
так там объект, если как у полей выше, то можно присвоить нал всему объекту. А мне нужно по отдельности каждому полю обьекта. И тут ступор)
источник

ЕУ

Евгений Удалов... in Angular - русскоговорящее сообщество
Vadim Malovaniy
тс будет ругатся
если тип соблюсти, то не будет, очевидно
источник

Р

Роберт in Angular - русскоговорящее сообщество
SR
Всем привет!

Как тут полям обьекта Candidate присвоить альтернативное значение как у поле выше?
типа { } as Candidate?
источник

VM

Vadim Malovaniy in Angular - русскоговорящее сообщество
Евгений Удалов
если тип соблюсти, то не будет, очевидно
так в этом и вопрос у человека
источник

S

SR in Angular - русскоговорящее сообщество
Роберт
типа { } as Candidate?
Спасибо!
источник