Angular2:Ajax 表单数据 return 空
Angular2 : Ajax form data return null
我正在尝试在 Angular2 中设置动态表单。
因此,在我的 ngOnInit 函数中,我发出了 Ajax 请求以获取带有表单数据的 JSON 。
像这样:
export class CustomerEditComponent{
private customer : Customer = new Customer();
private customerForm;
constructor(private _CustomersService: CustomersService, private _routeParams: RouteParams, private _fb: FormBuilder){
this.customerForm = _fb.group({
name: [],
job: [],
arrival_date: []
});
}
ngOnInit(){
let id = this._routeParams.get('id');
this._CustomersService.getById(id).subscribe(res => {
this.customer = res;
});
}
onSubmit(event){
console.log(event);
}
}
因此,在组件构造中,'customer' 等于最新的一个。 (所有属性都是空的)。但紧接着,我们为每个属性设置了值。
没问题,我的输入值正确。
但是,如果我提交我的表单,表单值等于:
Object {name: null, job: null, arrival_date: null}
(但视图中的表单已正确填充)。
这是我的表格(浓缩版):
<form [ngFormModel]="customerForm" (ngSubmit)="onSubmit(customerForm.value)">
<input md-input [(value)]="customer.name">
<input md-input [(value)]="customer.job">
<input md-input type="date" [(value)]="customer.arrival_date">
<button type="submit">Save</button>
</form>
我使用 [(value)] 导致 ng2-material 包。 (我已经尝试使用 ngControl)。
我认为我的代码是关于此功能的 'wrong',但我不知道在哪里。
谢谢!
编辑:
我找到答案了!
使用 ng2-material,我们需要像这样在每个输入上一起设置 [(value)] 和 [(ngModel)]:
<form [ngFormModel]="customerForm" (ngSubmit)="onSubmit(customerForm)">
<input md-input [(value)]="customer.name" [(ngModel)]="customer.name">
<input md-input [(value)]="customer.job" [(ngModel)]="customer.job">
<input md-input type="date" [(value)]="customer.arrival_date" [(ngModel)]="customer.arrival_date">
<button type="submit">Save</button>
</form>
[(value)]被ng2-material用来设置值'on front'.
我认为问题在于您没有在模板的 ngFormControl
指令中将表单输入与其控制器相关联。你应该这样重构:
<form [ngFormModel]="customerForm" (ngSubmit)="onSubmit(customerForm.value)">
<input md-input [(value)]="customer.name"
ngFormControl="name">
<input md-input [(value)]="customer.job"
ngFormControl="job">
<input md-input type="date" [(value)]="customer.arrival_date"
ngFormControl="arrival_date">
<button type="submit">Save</button>
</form>
从 ng2-material 样本中查看 link:https://github.com/justindujardin/ng2-material/blob/master/examples/components/input/form_builder.html
否则你为什么不使用 customer
对象而不是 customerForm.value
对象呢?
希望对你有帮助,
蒂埃里
我正在尝试在 Angular2 中设置动态表单。 因此,在我的 ngOnInit 函数中,我发出了 Ajax 请求以获取带有表单数据的 JSON 。 像这样:
export class CustomerEditComponent{
private customer : Customer = new Customer();
private customerForm;
constructor(private _CustomersService: CustomersService, private _routeParams: RouteParams, private _fb: FormBuilder){
this.customerForm = _fb.group({
name: [],
job: [],
arrival_date: []
});
}
ngOnInit(){
let id = this._routeParams.get('id');
this._CustomersService.getById(id).subscribe(res => {
this.customer = res;
});
}
onSubmit(event){
console.log(event);
}
}
因此,在组件构造中,'customer' 等于最新的一个。 (所有属性都是空的)。但紧接着,我们为每个属性设置了值。
没问题,我的输入值正确。
但是,如果我提交我的表单,表单值等于:
Object {name: null, job: null, arrival_date: null}
(但视图中的表单已正确填充)。
这是我的表格(浓缩版):
<form [ngFormModel]="customerForm" (ngSubmit)="onSubmit(customerForm.value)">
<input md-input [(value)]="customer.name">
<input md-input [(value)]="customer.job">
<input md-input type="date" [(value)]="customer.arrival_date">
<button type="submit">Save</button>
</form>
我使用 [(value)] 导致 ng2-material 包。 (我已经尝试使用 ngControl)。
我认为我的代码是关于此功能的 'wrong',但我不知道在哪里。
谢谢!
编辑:
我找到答案了! 使用 ng2-material,我们需要像这样在每个输入上一起设置 [(value)] 和 [(ngModel)]:
<form [ngFormModel]="customerForm" (ngSubmit)="onSubmit(customerForm)">
<input md-input [(value)]="customer.name" [(ngModel)]="customer.name">
<input md-input [(value)]="customer.job" [(ngModel)]="customer.job">
<input md-input type="date" [(value)]="customer.arrival_date" [(ngModel)]="customer.arrival_date">
<button type="submit">Save</button>
</form>
[(value)]被ng2-material用来设置值'on front'.
我认为问题在于您没有在模板的 ngFormControl
指令中将表单输入与其控制器相关联。你应该这样重构:
<form [ngFormModel]="customerForm" (ngSubmit)="onSubmit(customerForm.value)">
<input md-input [(value)]="customer.name"
ngFormControl="name">
<input md-input [(value)]="customer.job"
ngFormControl="job">
<input md-input type="date" [(value)]="customer.arrival_date"
ngFormControl="arrival_date">
<button type="submit">Save</button>
</form>
从 ng2-material 样本中查看 link:https://github.com/justindujardin/ng2-material/blob/master/examples/components/input/form_builder.html
否则你为什么不使用 customer
对象而不是 customerForm.value
对象呢?
希望对你有帮助, 蒂埃里