İki yolla bağlanmış giriş alanları içeren bir form. Amaç, verileri düzenlemek ve oluşturmak için aynı formu oluşturmaktı. Bu başarıldı, ancak bunu yapmanın daha iyi bir yolu olabileceğine eminim (AbstractControl özelliklerini kullanmak gibi). Ayrıca burada bir düzeltme özledim - clickEdit()
tıklandığında, kullanıcının düzenlemek istediği nesne ile form değerlerini güncellemesi gerekiyor. Herhangi bir yardım için teşekkürler ve AbstractControl
ve NgModel
konusunda özellikle açıklamalar ..Veri oluşturmak ve düzenlemek için aynı form Angular4
<div>
<form (ngSubmit)="clicked ? onEditSubmit($event) : onRegisterSubmit($event)" [formGroup] = "form">
<div class="form-group">
<label>Full Name</label>
<input type="text" [(ngModel)]="fullname" formControlName="fullname" class="form-control" >
</div>
<div class="form-group">
<label>Username</label>
<input type="text" [(ngModel)]="username" formControlName="username" class="form-control" >
</div>
<div class="form-group">
<label>Email</label>
<input type="text" [(ngModel)]="email" formControlName="email" class="form-control" >
</div>
<div class="form-group">
<label>Password</label>
<input type="password" [(ngModel)]="password" formControlName="password" class="form-control">
</div>
<button type="submit" class="btn btn-primary" [disabled]="!form.valid"> Submit </button>
</form>
</div>
<br>
<br>
<table border="2" class="table table-striped">
<tr>
<th>Full Name</th>
<th>Username</th>
<th>Email</th>
<th>Password</th>
<th>Delete</th>
<th>Edit</th>
</tr>
<div > </div>
<tr *ngFor="let user of userDetails; index as i">
<td>{{user.fullname}}</td>
<td>{{user.username}}</td>
<td>{{user.email}}</td>
<td>{{user.password}}</td>
<td><button (click)="userDelete()">X</button></td>
<td><button (click)="clickEdit(i)">Edit</button></td>
</tr>
</table>
Ve
import { Component } from '@angular/core';
import { initializeApp, database } from 'firebase';
import { FormControl, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent {
fullname : string;
username : string;
email : string;
password : string;
clicked = false;
userDetails:Array<object>;
form;
ngOnInit() {
this.userDetails=[];
this.form = new FormGroup({
fullname : new FormControl("", Validators.required),
username : new FormControl("", Validators.required),
email : new FormControl("", Validators.required),
password : new FormControl("", Validators.required)
});
}
onRegisterSubmit(e){
let user = {
fullname : this.fullname ,
username : this.username,
email : this.email ,
password : this.password
}
this.userDetails.push(user);
this.clearInputFields(e);
}
editIndex = null;
clickEdit(i){
this.clicked = !this.clicked;
this.editIndex = i;
}
onEditSubmit(e) {
let editUser = {
fullname : this.fullname ,
username : this.username,
email : this.email ,
password : this.password
}
this.userDetails[this.editIndex] = editUser;
this.clearInputFields(e);
this.clicked = !this.clicked;
}
clearInputFields(e){
let all = e.target.querySelectorAll('input');
Object.keys(all).forEach(key => {
console.log(all[key].value = '');
});
}
}
Detaylı cevap için çok teşekkürler. Bu formu sıfırdan yapmadım, sadece bazı özellikleri uyguladım ve evet, ayrıca ngModel'in burada gerekli olmadığını düşündüm. Ama cevabınız harika görünüyor, ayrıntılı olarak inceleyeceğim. Şerefe! –
Elbette, herhangi bir sorunla karşılaşırsanız ve yardımcı olmaktan memnuniyet duyarız. Yukarıdaki kodu test ettim, bu yüzden kesinlikle işe yaramalı :) – Alex