禁用输入 (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
);
我需要在 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
);