Angular2 ngModel в форме. Запретить обновление базовой модели

У меня есть эти свойства в компоненте, определенном как таковой.

userDataDefinitions:Array<userDataDefinition>;
currentDefinition:userDataDefinition = null;

Затем у меня есть форма, которая отображает данные в соответствии с currentDefinition, который установлен так:

<div *ngFor="let userDataDefinition of userDataDefinitions">
            <a href="#" (click)="setCurrentDefinition(userDataDefinition)">
              {{ userDataDefinition.key }}
            </a>
        </div>

Поля ввода формы используют ngModel как таковой:

[(ngModel)]="currentDefinition.property"

Это означает, что как только я отредактирую одно из полей ввода, лежащие в его основе currentDefinition И userDataDefinitions обновляются мгновенно, как и ожидалось. Мой вопрос: что мне делать, если я хочу, чтобы базовая модель обновлялась ТОЛЬКО после действия (такого как отправка формы)? Должен ли я клонировать текущее определение? Я не должен использовать ngModel?

Как правильно использовать angular2 для достижения этого результата?

большое спасибо

С уважением

2 ответа

Вы можете выполнить одностороннюю привязку свойства к представлению и обновлять свойство только в случае события по вашему выбору. Вот пример: http://plnkr.co/edit/lNcp7vcEGkozTzB8w4OT?p=info

//our root app component
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {FormsModule} from '@angular/forms'

    @Component({
      selector: 'my-app',
      template: `
        <div>
          <label>{{name}}</label>
          <input type="text" [ngModel]="name" />
          <button (click)="name = 'change'">Change</button>
        </div>
      `,
    })
    export class App {
      name:string;
      constructor() {
        this.name = 'Angular2'
      }
    }

    @NgModule({
      imports: [ BrowserModule, FormsModule ],
      declarations: [ App ],
      bootstrap: [ App ]
    })
    export class AppModule {}

Я думаю, это то, что вы ищете:

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

С "#" у вас есть ссылка на объект, который меняется, если вы затем нажмете кнопку, вы отправите свою информацию в качестве параметра.

Посмотрите на этот вопрос для более подробной информации

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

Другие вопросы по тегам