app.component.html
<div class="container"> <div class="row"> <div class="col-xs-12 col-sm-10 col-md-8 col-sm-offset-1 col-md-offset-2"> <form (ngSubmit)="onSubmit()" #myForm="ngForm"> <div id="user-data" ngModelGroup="myUserData" #myUserData="ngModelGroup"> <div class="form-group"> <label for="username">Username</label> <input type="text" id="username" class="form-control" ngModel name="username" required> </div> <button class="btn btn-default" type="button" (click)="suggestUserName()">Set All Values </button> <button class="btn btn-default" type="button" (click)="overrideUseName()">Override Part of Values </button> <div class="form-group"> <label for="email">Mail</label> <input type="email" id="email" class="form-control" ngModel name="email" required email #myEmail="ngModel"> <span class="help-block" *ngIf="!myEmail.valid && myEmail.touched">Please enter a valid email!</span> </div> </div> <p *ngIf="!myUserData.valid && myUserData.touched">User Data is invalid!</p> <div class="form-group"> <label for="secret">Secret Questions</label> <select id="secret" class="form-control" [ngModel]="'pet'" name="secret"> <option value="pet">Your first Pet?</option> <option value="teacher">Your first teacher?</option> </select> <div class="form-group"> <textarea name="questionAnswer" rows="3" class="form-control" [(ngModel)]="answer"></textarea> </div> </div> <div>Your replay: {{answer}}</div> <div class="radio" *ngFor="let gender of genders"> <label> <input type="radio" required name="gender" ngModel [value]="gender"> {{gender}} </label> </div> <button class="btn btn-primary" type="submit" [disabled]="!myForm.valid">Submit </button> </form> </div> </div> <hr/> <div class="row" *ngIf="submitted"> <div class="col-xs-12"> <h3>Your Data</h3> <p>Username: {{user.username}}</p> <p>Mail: {{user.email}}</p> <p>Secret Question: {{user.question}}</p> <p>Answer: {{user.answer}}</p> <p>Gender: {{user.gender}}</p> </div> </div> </div>
app.component.ts
import {Component, ViewChild} from '@angular/core'; import {NgForm} from '@angular/forms'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { @ViewChild('myForm') signupForm: NgForm; answer: string; genders = ['male', 'female']; user = { username: '', email: '', question: '', answer: '', gender: '' }; submitted = false; /** * Set values all together */ suggestUserName() { const suggestedName = 'Superuser'; this.signupForm.setValue({ myUserData: { username: suggestedName, email: '[email protected]' }, secret: 'pet', questionAnswer: 'Hello Wolrd', gender: 'male' }); } /** * Set part of values */ overrideUseName() { const suggestedName = 'Superuser'; this.signupForm.form.patchValue({ myUserData: { username: suggestedName } }); } onSubmit() { this.user.username = this.signupForm.value.myUserData.username; this.user.email = this.signupForm.value.myUserData.email; this.user.question = this.signupForm.value.secret; this.user.answer = this.signupForm.value.questionAnswer; this.user.gender = this.signupForm.value.gender; this.submitted = true; } }