【问题标题】:Get back old value on cancel for input-field取回输入字段取消时的旧值
【发布时间】:2018-01-07 01:06:36
【问题描述】:

我对输入字段有一个相当简单的双向数据绑定,并且希望输入字段绑定的值返回到单击“取消”按钮时的值。

代码目前是这样的:

html:

<div *ngIf="editModeToggle" class="five wide column left floated">
  <div class="edit-on">
    <input type="text" class="header" [(ngModel)]="item.name">
  </div>
</div>
<div *ngIf="!editModeToggle" class="five wide column left floated">
  <div class="header">{{item.name}}</div>
</div>

  <div *ngIf="editModeToggle" class="one wide column">
    <a (click)="saveChanges(item)"><i class="save icon"></i></a>
  </div>
  <div *ngIf="editModeToggle" class="one wide column">
    <a (click)="cancelEdit()"><i class="cancel icon"></i></a>
  </div>

  <div *ngIf="!editModeToggle" class="one wide column">
    <a (click)="edit(item)"><i class="edit icon"></i></a>
  </div>

ts:

  edit(item: any) {
    this.editModeToggle = true;
    this.oldItemData = this.item;
    console.log('------ edit activate -------')
    console.log('old item:', this.oldItemData.name);
    console.log('item:', this.item.name);
  }

  saveSbuChanges(item: any) {
    // some stuff happens
    this.editModeToggle = false;
    console.log('------ save -------')
    console.log('old item:', this.oldItemData.name);
    console.log('item:', this.item.name);
  }

  cancelEdit() {
    this.editModeToggle = false;
    this.item = this.oldItemData;
    console.log('------ cancel -------')
    console.log('old item:', this.oldItemData.name);
    console.log('item:', this.item.name);
  }

我期望的是,当我单击取消时,以“ABC”初始化的 item.name 将返回 ABC。相反,this.oldItemData.name 采用新值。

控制台日志:

------ edit activate -------  
old item: ABC  
item: ABC  
------ cancel -------  
old item: ABCD  
item: ABCD

我错过了什么/如何取消将值返回到激活编辑模式时的值?

【问题讨论】:

    标签: angular input data-binding


    【解决方案1】:

    this.oldItemData 是对this.item 的引用。它将始终包含更新的值。您需要做的是复制对象。这是一个例子:

    this.oldItemData = JSON.parse(JSON.stringify(this.item));

    【讨论】:

    • 行得通!怀疑有类似的东西,但不确定如何制作实际副本,非常感谢!甚至不必更改 this.item=this.oldItemDate 部分
    • 这将销毁任何 Date 对象。仅当您的根对象中没有方法/日期对象时才可以这样做
    • 同意@GrégoryElhaimer,但在这种情况下,他没有任何这样的成员。
    猜你喜欢
    • 2014-12-26
    • 2021-09-30
    • 2021-01-06
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2013-02-06
    • 2021-08-01
    • 2013-09-01
    相关资源
    最近更新 更多