You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular组件中onSubmitClick更新getter属性canSave报错的解决方法

解决Getter属性无法直接赋值的问题

你遇到的错误是因为canSave是仅定义了get的计算属性,属于只读属性,无法直接赋值。要实现提交时让canSave返回false的需求,可以通过新增一个状态变量来控制getter的返回值,具体修改如下:

步骤1:添加私有状态变量

在组件类中新增一个私有变量,用于标记当前是否处于提交状态:

export class ManagePhonesPopup extends DialogBaseComponent<Params, boolean> implements OnInit {
  public override params!: Params;
  public rows: IPhoneRow[] = [];
  private _submitting = false; // 新增:标记提交状态

  // ... 其他代码
}

步骤2:修改canSave getter

在getter逻辑开头加入提交状态的判断,若处于提交中则直接返回false:

public get canSave(): boolean {
  // 提交中直接返回false,禁用保存操作
  if (this._submitting) return false;

  const isValid = this.rows.every(r => r.phoneControl.valid);
  if (!isValid) {
    return false;
  }
  const changes = this.managePhonesPopupService.getChanges(this.rows, this.params);
  return changes.phones.changed || changes.emergencyPhone.changed;
}

步骤3:更新onSubmitClick方法

在提交开始时将_submitting设为true,同时处理请求失败的情况,恢复状态以允许重新提交:

public onSubmitClick(): void {
  const changes = this.managePhonesPopupService.getChanges(this.rows, this.params);
  this._submitting = true; // 标记为提交中

  this.params
    .onSubmit(changes)
    .pipe(take(1))
    .subscribe({
      next: () => {
        this.close(true).then();
      },
      error: () => {
        // 请求失败时恢复状态,允许用户重新尝试提交
        this._submitting = false;
      }
    });
}

这样修改后,点击提交按钮时canSave会自动返回false,实现你想要的禁用效果,同时避免了直接赋值只读属性的错误。

内容的提问来源于stack exchange,提问作者Eugene Sukh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:53:21