hi, I have form ionic
HTML file:
<form #form="ngForm" (ngSubmit)="editprofile()" >
<ion-list >
<ion-item>
<ion-label stacked>{{'Fullname' | translate}}</ion-label>
<ion-input type="text" value={{profile.fullname}} [(ngModel)] ="dataProfile.fullname" name = "fullname" ></ion-input>
</ion-item>
<ion-item>
<ion-label stacked>{{'Email' | translate}}</ion-label>
<ion-input type="text" value={{profile.email}} [(ngModel)]="dataProfile.email" name = "email"></ion-input>
</ion-item>
</ion-list>
<button ion-button block (click)="editprofile()">{{'Update' | translate}}</button>
</form>
TS file:
editprofile(value: any): void{
let dataProfile ={
fullname : this.fullname,
email : this.email,
}
this.loadingprovider.showupdate(this);
this.profileService.upload(dataProfile)
.subscribe(data =>{
this.loading.dismiss();
this.navCtrl.setRoot(ProfilePage);
},(err)=>{
this.loading.dismiss();
})
}
And I have bug: ERROR TypeError: Cannot read property āfullnameā of undefined
I donāt understand @@.
How to solve it?
You call the editprofile()
function without any parameter, so the value
will be undefined, maybe try this
(ngSubmit)="editprofile(form)"
, and then I would use value.fullname
instead, plus a submit button
is enough for you, that will call your function which is in (ngSubmit)
so donāt create a new click event.
Btw check the Forms with Templates section.
Oh NO, Itās not work for me,
I tried everything but still failed
hi @healer12
you are using āletā keyword inside a method called editProfile(). āletā keyword is block scoped, the scope of that variable (dataProfile) is limited to editProfile method. you couldnāt access dataProfile outtside of editProfile method. that is why itās says it is undefined.
declare dataProfile publicly.
export class somecomponent {
public dataProfile: any = {}
}
1 Like
try this
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
export class testClass {
testForm: FormGroup;
constructor(private fb: FormBuilder) {
this.testForm = this.fb.group({
fullname: ['', Validators.required],
email: ['', Validators.email]
})
}
editProfile(): void {
this.loadingprovider.showupdate(this);
this.profileService.upload(this.testForm.value)
.subscribe(data =>{
this.loading.dismiss();
this.navCtrl.setRoot(ProfilePage);
},(err)=>{
this.loading.dismiss();
})
}
}
<form [formGroup]="testForm" (ngSubmit)="editprofile()" >
<ion-list >
<ion-item>
<ion-label stacked>{{'Fullname' | translate}}</ion-label>
<ion-input type="text" formControlName="fullname" name = "fullname" ></ion-input>
</ion-item>
<ion-item>
<ion-label stacked>{{'Email' | translate}}</ion-label>
<ion-input type="text" formControlName="email"name = "email"></ion-input>
</ion-item>
</ion-list>
<button ion-button block (click)="editprofile()">{{'Update' | translate}}</button>
1 Like
I tried your way and it works fine, thank youā¦