Отключить ввод (Angular) - PullRequest
0 голосов
/ 18 июня 2020

Мне нужно установить значение onInit и отключить этот ввод. Я пробовал что-то вроде этого:

this.authenticationService.get().subscribe((user) => 
  this.form.controls.recruiter.setValue(`${user.firstName} ${user.lastName}`).disable()
);

, но есть ошибка, которая Property 'disable' does not exist on type 'void'. Но если я перепишу его отдельно, например:

this.authenticationService.get().subscribe((user) => {
  this.form.controls.recruiter.setValue(`${user.firstName} ${user.lastName}`);
  this.form.controls.recruiter.disable();
});

, ошибка исчезнет. Может кто-нибудь объяснить, почему так, и, может быть, есть способ лучше, как это сделать.

1 Ответ

1 голос
/ 18 июня 2020

Первый вариант не сработал, потому что метод setValue() ничего не возвращает. Таким образом, не будет свойства для вызова функции disable().

Если вам нужно убедиться, что значения установлены, прежде чем отключать его, вы можете попробовать подписаться на valueChanges() observable с помощью take(1) оператор подключен.

this.authenticationService.get().pipe(
  switchMap((user) => {
    this.form.controls.recruiter.setValue(`${user.firstName} ${user.lastName}`);
    return this.form.controls.recruiter.valueChanges.pipe(take(1));
  }
).subscribe(
  null,
  null,
  () => { this.form.controls.recruiter.disable() }   // <-- trigger in `complete` callback to be sure
);
...