up vote
0
down vote
favorite
Hi I am getting the following error on my form

EXCEPTION: Expression has changed after it was checked. Previous value: 
'Advertising'. Current value: 'Contractors'.


here is my html form


<form [formGroup]='billTypesForm' (ngSubmit)=
"submitForm(billTypesForm.value)">


    <table>
      <thead>
      <tr>
        <th>name</th>
        <th>percentage</th>
        <th>out of scope</th>
        <th>Edit</th>
      </tr>
      </thead>
      <tbody>


      <tr *ngFor='let billType of billTypes; let i = index'>


        <input type="hidden" name="id" [(ngModel)]="billType.id" [
formControl]="billTypesForm.controls['id']" />


        <td class="name">
          <div class="input-field">
            <input type="text" name="name" placeholder="Name" [(ngModel)]=
"billType.name" [formControl]="billTypesForm.controls['name']" />
          </div>
        </td>


        <td class="percentage">
          <div class="input-field">
            <input type="text" name="percentage"  [(ngModel)]=
"billType.percentage" readonly placeholder="Tax" [formControl]=
"billTypesForm.controls['percentage']" />
          </div>
        </td>
        <td class="outOfScope">
          <input type="checkbox" name="outOfScope"  [(ngModel)]=
"billType.outOfScope"  [formControl]="billTypesForm.controls['outOfScope']" 
/>
        </td>


        <input type="hidden" name="active" [(ngModel)]="billType.active"  [
formControl]="billTypesForm.controls['active']" />


        <td class="edit" onclick="deleteBillTypeRow($(this));">
          <i class="material-icons">mode_edit</i>
        </td>


      </tr>
      </tbody>
    </table>
  </form>

The problem seems to be around [(ngModel)]="billType.name" in the input 
text boxes

here is my component

import {Component, OnInit, AfterViewInit, Input} from '@angular/core';

import {FormBuilder, FormGroup, FormControl, FormArray} from '@angular/forms'
import {BillTypesDataService} from './bill-types-data.service'
import {BillTypes} from "./bill-types";



@Component({
 selector: 'brightbook-bill-types',
 templateUrl: './bill-types.component.html',
 styleUrls: ['./bill-types.component.css'],
})
export class BillTypesComponent implements OnInit {

 billTypesForm : FormGroup;
 public billTypes: BillTypes;

 constructor(private billTypesService: BillTypesDataService, fb: FormBuilder) {

 this.billTypesForm = new FormGroup({
 id:new FormControl(''),
 name: new FormControl(''),
 percentage: new FormControl(''),
 outOfScope:new FormControl(''),
 active: new FormControl('')
 });


 }

 ngOnInit() {

 }


 ngAfterViewInit() {
 this.billTypesService.getBillTypes()
 .subscribe(
 (res:BillTypes) => this.billTypes = res,
 error => console.log( <any>error)
 );
 }


 submitForm(form: any): void{
 console.log('Form Data: ');
 console.log(form);
 }
}




and here is my service


import { Injectable } from '@angular/core';
import {Http, Response, Request, RequestMethod} from '@angular/http';
import {BillTypes} from './bill-types'


import {Observable} from "rxjs";


import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';


@Injectable()
export class BillTypesDataService {


  private billTypesUrl = '/settings/bill-types/json';


  billTypes: BillTypes[] = [];


  constructor(public http: Http) {
  }


  getBillTypes() {
    return this.http.get(this.billTypesUrl)
      .map(res => <BillTypes[]> res.json())
      .catch(this.handleError);
  }


  private handleError (error: Response) {
    return Observable.throw('Internal server error');
  }


}

this is the json I am getting back from the end point call

[
  {
    "id": null,
    "name": "Advertising",
    "percentage": 0.5,
    "outOfScope": false,
    "active": true,
    "created": null
  },
  {
    "id": null,
    "name": "Car & Truck Expenses",
    "percentage": 1,
    "outOfScope": false,
    "active": true,
    "created": null
  },
  {
    "id": null,
    "name": "Contractors",
    "percentage": 0,
    "outOfScope": false,
    "active": true,
    "created": null
  }
]

I have a model class that looks like this

export class BillTypes {
  constructor(
  public id:string,
  public name:string,
  public percentage:number,
  public outOfScope:boolean,
  public active:boolean,
  public dateCreate:string,
  ){}
}

If anyone can help that would be much appreciated thanks in advance.

-- 
You received this message because you are subscribed to the Google Groups 
"Angular and AngularJS discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to