私の編集機能に助けが必要です。編集ボタンをクリックすると、フォームにアイテムを読み込む必要があります。これは私のアプリの仕組みです。まず、ユーザーのリストがあり、その特定のユーザーの「詳細を表示」ボタンをクリックすると、新しいページにリダイレクトされます。その新しいページでは、 "編集ボタン"を見つけることになるので、私はそれがオブジェクトであるのでインデックスを持たないので連絡先番号を使って編集機能を選択しようとしています。ただ1つの問題がありますし、フォームを編集する際にアイテムをどのようにロードすることができますか?私はこれが非常に単純な問題だと信じていますが、私はこれについて混乱しています。より良い解決策があれば、私を助けてください。フォームにアイテムをロードする角度を編集する
ユーザdetail.component.ts
export class UserDetailComponent implements OnInit {
user: User;
id: number;
constructor(private userService: UserService,
private route: ActivatedRoute,
private router: Router) { }
ngOnInit() {
this.route.params
.subscribe((params: Params) => {
this.id = +params['id'];
this.user = this.userService.getUser(this.id);
});
}
onEditDetail(index: number) {
this.router.navigate(['users', this.id, 'edit']);
}
}
ユーザedit.component.html
<div class="card-block">
<form (ngSubmit)="onUpdateUser(f)" #f="ngForm">
<div class="form-group">
<label for="First Name">First Name</label>
<input type="text" class="form-control" [(ngModel)]="user.f_name" name="f_name" ngModel required>
</div>
<div class="form-group">
<label for="Last Name">Last Name</label>
<input type="text" class="form-control" [(ngModel)]="user.l_name" name="l_name" ngModel required>
</div>
<div class="form-group">
<label for="Contact Number">Contact Number</label>
<input type="number" class="form-control" [(ngModel)]="user.contact_no" name="contact_no" ngModel required pattern="^[1-9]+[0-9]*$">
</div>
<button class="btn btn-warning pull-right" [disabled]="!f.valid"><i class="fa fa-download" aria-hidden="true"></i> Update</button>
</form>
</div>
ユーザedit.component.ts
export class UserEditComponent implements OnInit {
@ViewChild('f') editForm: NgForm;
user: User;
id: number;
constructor(private userService: UserService,
private route: ActivatedRoute,
private router: Router) { }
ngOnInit() {
this.route.params
.subscribe((params: Params) => {
this.id = +params['id'];
this.user = this.userService.getUser(this.id);
});
}
onUpdateUser(form: NgForm) {
const value = form.value;
const updatedUser = new User(value.f_name, value.l_name, value.contact_no);
alert("Successfully Updated");
this.router.navigate(['users', this.id]);
}
}
user.service.ts
import { User } from './user.model';
import { Subject } from 'rxjs/Subject';
export class UserService {
usersChanged = new Subject<User[]>();
private users: User[]= [
new User('Harry', 'James', 99999889),
new User('Thomas', 'Baker', 99638798)
];
getUsers() {
return this.users.slice();
}
getUser(index: number) {
return this.users[index];
}
addUser(user: User){
this.users.push(user);
this.usersChanged.next(this.users.slice());
}
deleteUser(index: number){
this.users.splice(index, 1);
this.usersChanged.next(this.users.slice());
}
}
私の知る限りでは、 'this.editForm.setValue'構文のみ反応性フォームのためです。しかし、あなたはテンプレート駆動フォームを使用しているようです。 – DeborahK
@DeborahK。では、テンプレート駆動のための等価は何ですか? – Joseph
@mokとしてのngModelバインディングの使用について以下に述べます。 – DeborahK