我坚持使用Angular5 ReactiveForm 实际上,我创建了一个基本的模型子
sub.model.ts :
export interface Subscription {
name: string;
}
我还有一个组件:: sub.component.ts
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Sub } from '@models/sub.model';
@Component({
selector: 'md-subscribe',
templateUrl: './subscribe.component.html',
styleUrls: ['./subscribe.component.scss']
})
export class SubComponent {
subForm: FormGroup;
sub: Subscription;
constructor(private builder: FormBuilder) {
this.subForm = this.builder.group({
name : ['', Validators.required]
});
}
subscribe() {
this.sub.name = 'test value';
}
}
总结一下,一个html模板:
<form class="form align-end" [formGroup]="subscribeForm" (ngSubmit)="subscribe()">
<h2 class="label label--blue">S'inscrire</h2>
<div class="form-group"><input type="text" id="name" name="name" formControlName="name" placeholder="Hubert" required /></div>
</form>
所以我尝试提交表单。我可以使用this.subForm.value
获取值,但是当我尝试分配值test value
或this.subForm.value.name
时,我在控制台中出错。
ERROR TypeError: Cannot set property 'email' of undefined
at SubscribeComponent.subscribe (subscribe.component.ts:24)
at Object.eval [as handleEvent] (SubscribeComponent.html:1)
at handleEvent (core.js:13581)
at callWithDebugContext (core.js:15090)
at Object.debugHandleEvent [as handleEvent] (core.js:14677)
at dispatchEvent (core.js:9990)
at eval (core.js:12332)
at SafeSubscriber.schedulerFn [as _next] (core.js:4351)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:240)
at SafeSubscriber.next (Subscriber.js:187)
事实上,我的对象sub是未定义的,但为什么我不能赋值。我也更改了zone.js版本,但问题仍然存在。 我该如何分配价值?
答案 0 :(得分:1)
我认为这是因为你使用了错误的对象。你只有sub的声明。在你的组件中应该是:
sub: Subscription = <Subscription>{name:""} ;
subscribe() {
this.sub.name = this.subForm.value.name;
}
的示例
答案 1 :(得分:0)
当我使用ReactiveForms时,我喜欢有两个变量:data和dataForm(在你的case sub和subForm中)和一个函数buildForm
subForm: FormGroup;
sub: Subscription;
constructor(private builder: FormBuilder) {}
//For example in ngOnInit
ngOnInit()
{
this.buildForm();
}
//or when we subscribe
subscribe() {
this.sub.name = 'test value'; //<--give value to the "data"
this.subForm=this.buildForm(this.sub); //<--create a groupForm with the data
}
//Our function buildForm return a formGroup
buildForm(sub:Subscription|null)
{
return this.builder.group({
name : [sub? sub.name:'', Validators.required]
})
}