typescript - Angular2 oppdater visning etter skjema innsending


Jeg lager en enkel CRUD-applikasjon ved hjelp av Angular2. Appen består av en tabell for å liste opp nåværende poster og et skjema for å sende inn nye poster. Hva er den riktige måten å oppdatere tabellen min på for å gjenspeile den nye posten etter at jeg sender inn skjemaet? Her er hva jeg har så langt.

export class PersonForm {
  data: Object;
  loading: boolean;

  personForm: ControlGroup;
  constructor(private _peopleService: PeopleService, personFormBuilder: FormBuilder) {
    this.personForm = personFormBuilder.group({
      'name': [],
      'age': []
    });
  }

  onSubmit(values:any) : void {
    console.log(values);
    this._peopleService.createPerson(values).subscribe()
  }
}

I ovenstående antar jeg at .subscribe() er der du vil håndtere tilbakekallingen for å oppdatere visningen?

Og her er den utsikten:

<h1>People</h1>
  <table class="ui celled small table ">
    <thead>
      <tr>
        <th>Name</th>
        <th>Age</th>
      </tr>
    </thead>
    <tr *ngFor="#person of people">
      <td>
        {{person.name}}
      </td>
        <td>
        {{person.age}}
      </td>
    </tr>
  </table>
<div>
<person-form></person-form>
</div>

Og her er skjemaet:

<form [ngFormModel]="personForm"(ngSubmit)="onSubmit(personForm.value)" class="ui form">

  <div class="field">
    <label>Full Name</label>
    <input id="nameInput" type="text" placeholder="Full Name" [ngFormControl]="personForm.controls['name']">
  </div>

  <div class="field">
    <label>Age</label>
    <input id= "ageInput" type="text" placeholder="Age" [ngFormControl]="personForm.controls['age']">
  </div>

  <button type="submit" class="ui button blue">Submit</button>
</form>

Svar #1

I komponenten til visningen din må du sette en hendelseslytter. La oss kalle den PersonComponent foreløpig siden jeg ikke vet hva du har kalt den.

export class PersonComponent{
    person = {};

    updatePerson(person){
        this.person = person;
    }
}

Da må du i din PersonForm sette en EventEmitter

export class PersonForm {
    data: Object;
    loading: boolean;
    personUpdated: EventEmitter<any> = new EventEmitter<any>();

    ...

    onSubmit(values:any) : void {
        console.log(values);
        this._peopleService.createPerson(values).subscribe((person) => {
            this.personUpdated.emit(person);
        });
    }
}

Til slutt vil du abonnere på hendelsen i din PersonComponent som vil lytte til personUpdated-hendelsen og kjøre updatePerson-metoden med verdien fra den hendelsen.

<person-form (personUpdated)="updatePerson($event)"></person-form>

Relaterte artikler