我有一个基本的角度组件,允许某个用户在他们转到他们的配置文件并单击“编辑”后编辑用户的详细信息。Angular - 从服务重新填充表单输入
组件:
export class EditUserComponent implements OnInit {
// Define our vars
user: Users[];
editUserForm: FormGroup;
message: {};
displayMessage = false;
userID: number;
errorMessage: any = '';
constructor(
private fb: FormBuilder,
private _userService: UserService,
private activatedRoute: ActivatedRoute
) {
}
ngOnInit(): void {
// Get the userID from the activated route
this.activatedRoute.params.subscribe((params: Params) => {
this.userID = params['id'];
});
// Call our service and pass the UserID
this._userService.getUser(this.userID)
.then(res => {
this.user = res;
this.createForm();
});
}
// Generate the form
createForm() {
this.editUserForm = this.fb.group({
QID: ['', Validators.required],
favoriteColor: [''],
favoriteNumber: [''],
favoriteActor: ['']
});
}
}
服务:
// Fetch a single user
getUser(userID: number) {
return this._http.post(this.baseUrl + '/fetchUser', { "userID": userID }, { "headers": this.headers })
.toPromise()
.then(res => res.json())
.catch(err => { this.handleError(err); });
}
接口:
export interface Users {
RecordID?: number;
QID: string;
favoriteColor?: string;
favoriteNumber?: number;
favoriteActor?: string;
}
我试图通过值给我的formGroup,但我无法弄清楚如何访问这些值。
我认为我可以做这样的事情,我可以访问用户模型,并从中选择一个属性,但是抛出一个未定义的错误。
我会在表单组中传递值,还是直接以某种方式将它们绑定到元素上?我正好从服务中收到数据,只是不确定如何将每个值返回到各自的字段。
createForm() {
this.editUserForm = this.fb.group({
QID: [this.user.QID, Validators.required],
favoriteColor: [''],
favoriteNumber: [''],
favoriteActor: ['']
});
}
所以你的第二个使用'this.user.QID'的例子是我理想的解决方案,并且是我首先尝试的,但是我在'Users []'类型'中找不到'Property'QID'的错误。“我认为它是正确的,因为它在我的界面中定义。 – SBB
这正是它所说的吗?如果是这样,那么它认为'this.user'是一个数组。你是否从'getUser'获得数组而不是获取单个用户? – DeborahK
噢......我看到了......你把它声明为一个顶部数组:'user:Users [];'如果它不应该是一个数组,那么将它改为'user:Users'(没有数组)。 – DeborahK