Angular2 - обновить модель по нажатию кнопки

При использовании angular2 ngModel для двусторонней привязки данных:

<input [(ngModel)]="heroName">

Есть ли способ обновить модель только после нажатия кнопки? Или сможете отменить изменения, внесенные пользователем в элемент управления вводом? Я знаю о другом подходе, где мы можем разделить [(ngModel)] в его [] а также () и обновлять ввод только по размытию или при нажатии клавиши Enter и т. д. - но это не то, что я хочу.

Мне это нужно, потому что пользователь должен иметь возможность отменить изменения. Спасибо

3 ответа

Решение

Вы можете сделать следующее для этого,

ДЕМО: http://plnkr.co/edit/OW61kGGcxV5MuRlY8VO4?p=preview

{{heroName}}<br>
<input [ngModel]="heroName" #change> <br>
<br>
<button (click)="update(change.value)">Update Model</button>

export class App {
  heroName="Angular2";
  update(value){
    console.log('value before button click' + this.heroName);
    this.heroName=value;
    console.log('value after button click' + this.heroName);
  }
}

Вы можете создать новое свойство для свойства привязки формы.

Будет выглядеть так

<input [(ngModel)]="formHeroName" #change> <br>
{{selectedHeroName}}
<br>

Обновить модель Отмена

export class App implements OnInit {
selectedHeroName="Angular2";
formHeroName = "";

ngOnInit() {
  this.formHeroName = this.selectedHeroName;
}

update(){
  this.selectedHeroName= this.formHeroName;
}

cancel() {
  this.formHeroName = this.selectedHeroName;
}
}

См. Plunker для примера - http://plnkr.co/edit/0QEubJDzlgs0CdnKrS8h?p=preview

Вы можете отделить ваши "живые" данные от ваших "действительных" данных.

Попробуйте что-то вроде этого:

<input [(ngModel)]="live.heroName">
<button (click)="save()">Save</button>
<button (click)="reset()">Reset</button>

И контроллер:

live = { heroName: '', heroPower: '' };
valid = { heroName: '', heroPower: '' };

save() {
    this.valid = Object.assign({}, this.live);
}

reset() {
    this.live = Object.assign({}, this.valid);
}
Другие вопросы по тегам