Search code examples
angularangular5angular-formsangular-formbuilder

Getting [Object Object] in angular application


Getting [Object Object] in angular form and also dropdown(select) not set to default 0 index. While in case of edit everything working fine. Do I need to initialize model properties for this create page?

enter image description here

Edit : ngModelChange not calling the function doNameChange.

Component:

  export class User {
  Id: number;
  Name: string;
  Gender: string;    
}
this.user = {
      Id: 0,
      Name: '',
      Gender: ''
}
doNameChange(event) {
    debugger;
    console.log(event); // logs model value
  }

Html:

 <form (ngSubmit)="save(f.value, f.valid)" #f="ngForm" novalidate materialize>      
      <input id="Name" (ngModelChange)="doNameChange($event)" name="Name" #Name="ngModel" type="text" class="validate form-control" required minlength="3" [(ngModel)]="user.Name">
      <select id="Gender"  name="Gender" #Gender="ngModel" class="validate form-control" [(ngModel)]="user.Gender" required>
          <option value="">-- Select Gender --</option>
          <option value="Male">Male</option>
          <option value="Female">Female</option>
        </select>
    </form>

Solution

  • While using reactive forms, don't use ngModel which is for template based forms. If you need to listen to the changes:

    ngÒnInit(){
       this.employeeForm = this._fb.group({
          EmployeeId: 0,
          Name: ['', [Validators.required, Validators.minLength(3)]],
          Gender: ['', [Validators.required]]  //dropdown
       });
       this.onChanges();
    }
    ...
    
    onChanges(): void {
      this.myForm.valueChanges.subscribe(val => {
            console.log(val);
      });
    }
    
     //or:
    onChanges(): void {
      this.myForm.get('name').valueChanges.subscribe(val => {
        console.log(val);
      });
    }