I'm stuck with Angular5 ReactiveForm.
Actually, I create a basic model sub
sub.model.ts :
export interface Subscription {
name: string;
}
I also have a component : : 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';
}
}
And to conclude, a html template :
<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>
So I try to submit the form. I can get the value with this.subForm.value
but when I try to assign value test value
or this.subForm.value.name
, I have an error in console.
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)
In fact, my object sub is undefined but why I can't assign value. I also changed zone.js version but problem still. How can I assign value ?
When I'm working with ReactiveForms, I like have two variables:data and dataForm (in your case sub and subForm) and a function buildForm
I think it is because you are using wrong object. You have only declaration of sub. In your componentshould be:
Here is example without error https://stackblitz.com/edit/angular-atjwke