Ъглово свързване към обект, а не ArrayList

Използвам Angular и се опитвам да премина през обект

JSON

employee {"fName":"mike","email":"[email protected]"}

интерфейс

export interface Employee {
fName:string
email:string

}

компонент

    iEmployee: Employee[];
getITIMDATA() {
        this._ersaDet.getITIMData(this.ersaGlobalUID)
            .subscribe(
            data => {
                this.iEmployee = data;
            },
            error => 'GetAllCostCenetrs Method: ');

    }

HTML

 <div *ngFor="let itim of iEmployee">
        <div class="col-lg-12">
            <div class="row">
                <div class="form-group">
                    <label class="control-label">Name</label>
                    <input type="text"  name="Name" class="form-control" id="ntName" [(ngModel)]="itim.fName">
                </div>
            </div>
        </div>
 <div>

грешката, която получавам, когато кодът се изпълни, е

Не може да се намери различен поддържащ обект „[object Object]“ от тип „object“. NgFor поддържа само обвързване към Iterables като масиви.


person rgoal    schedule 13.08.2018    source източник


Отговори (2)


Е, вашият код за абониране е

data => {
    this.iEmployee = data;
}

какво е съдържанието на data? можете ли да отпечатате стойността на this.iEmplyoee след присвояването.

Компилаторът на TypeScript казва, че не е масив от обекти.

Можете ли да създадете прост работещ пример? (на Stackblitz, plunkr, ....)

АКТУАЛИЗАЦИЯ

Изглежда очаквате да получите единичен запис, а не масив, така че можете или:

  • премахнете ngFor
  • променете кода вътре в абонамента на нещо подобно

    данни => { this.iEmployee = [данни]; }

Между другото, много е странно, че не получавате грешка/предупреждение от компилатора, когато се опитате да присвоите един обект към масив от обекти. Премахнахте ли някои проверки във файла tsconfig?

person Massimo Costa    schedule 13.08.2018
comment
когато направя console.log(this.iEmployee) получавам това [object Object] - person rgoal; 14.08.2018
comment
опитай с console.log(JSON.stringify(this.iEmployee)) - person Massimo Costa; 14.08.2018
comment
Отидох и намерих служител {fName:mike,email:[email protected]} - person rgoal; 14.08.2018
comment
@MassimoCosta, OP не получава никакво предупреждение, защото data в този контекст има тип any, който може да бъде присвоен на всичко, включително масив, без грешка. - person Simon K; 14.08.2018
comment
страхотно се получи...последният ми въпрос каква е магията на скобите [данни]? просто така разбирам - person rgoal; 14.08.2018
comment
добре, правя this.iEmployee масив от обекти, съдържащ само един запис data. Между другото, ако се обадите винаги връща един запис, може би можете да използвате скаларна стойност, а не масив. Ако отговорът работи, не забравяйте да го приемете - person Massimo Costa; 14.08.2018

Трябва да върнете масив в json, а не един обект. Дори ако имате един обект, трябва да върнете масив от един обект.

person muasif80    schedule 13.08.2018