禁用输入 (Angular)

Disable input (Angular)

我需要在 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();
});

错误消失了。有人可以解释为什么会这样吗,也许会有更好的方法。

第一个变体不起作用,因为 setValue() 方法 returns 什么都没有。所以不会有 属性 来调用 disable() 函数。

如果您需要确保在禁用它之前设置了值,您可以尝试订阅 valueChanges() 可观察到的 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
);