angular - 基于 API 响应的 Angular 表单中的启用/禁用按钮
问题描述
我正在使用带有反应形式的 Angular8。最初,我禁用提交按钮,直到整个表单都填充了有效数据。
<div>
<form>
...........
</for>
<button [disabled]="(checkifSaveEnabled() && !formCreateNewPlan.valid)"
(click)="createNewPlan()">Save</button>
</div>
在类(TS)文件中:
checkifSaveEnabled() {
if (this.formCreateNewPlan.pristine || !this.formCreateNewPlan.valid) {
return true;
}
return false;
}
createNewPlan(): void {
this.submitted = true;
this.myservice.create(this.formCreateNewPlan.value).subscribe(result => {
if (result.success && result.data.planId > 0) {
...
}
}
这里一切正常。但是,如果我从服务 (API) 响应中收到任何错误,我想禁用提交时按钮(以避免多次单击)并使其重新启用。如何做到这一点?
解决方案
submitted
如果 API 正在进行中,您可以使用它将为 true,如果 API 解析或拒绝,则将变为 false。现在您可以在其中使用 finalize 运算符将其设置submitted
为 false。它将在 observable 的成功或错误块之后执行。
createNewPlan(): void {
this.submitted = true;
this.myservice.create(this.formCreateNewPlan.value)
.pipe(finalize(() => { this.submitted = false; }))
.subscribe(result => {
if (result.success && result.data.planId > 0) {
}
}, (error) => {
console.log(error)
});
模板的相应变化
<button [disabled]="submitted || (checkifSaveEnabled() && !formCreateNewPlan.valid)"
(click)="createNewPlan()">Save</button>
推荐阅读
- php - Laravel 集合扩展关系(通过或失败)
- ios - 在 iOS 上的 Swift 中持久化自定义对象数组的最佳方法
- c - C语言高级骰子游戏
- reason - 如何定义可重用的常量?
- arduino - myRio 和 Arduino 之间的 SPI
- django - Django - 模型 - 从内置用户继承的自定义用户
- c++ - C++ 让程序自己改写
- python-3.x - Pandas DataFrame export to_csv change dtype of columns
- c++ - 什么时候应该使用 const_iterator 而不是 auto
- python-3.x - 谷歌colab中的张量流