【发布时间】:2017-05-24 03:56:53
【问题描述】:
我收到此错误 “找到一个不同的支持对象 '[object Object]' 类型为 'object'。NgFor 仅支持绑定到 Iterables,例如数组。”
这是我的代码:
<tbody>
<tr *ngFor='let tab of tabs'>
<td>
<ul class="list-unstyled list">
<li><a href="#" class="anchorLink"><i class="icon-home scolor"></i><font color="white">{{tab.TabName}}</font></a></li>
</ul>
</td>
</tr>
</tbody>
navMenu.copnent.ts
import { Component, OnInit } from '@angular/core';
import { NavMenuService } from './navMenu.service';
import { InavMenuTabs } from './navMenu';
@Component({
selector: 'nav-menu',
moduleId: module.id,
templateUrl: 'navMenu.component.html'
})
export class NavMenuComponent implements OnInit {
tabs: InavMenuTabs[];
errorMessage: string;
constructor(private _navMenuService: NavMenuService) {
}
ngOnInit(): void {
this._navMenuService.getTabs(1, 'XXXX')
.subscribe(tabs => this.tabs = tabs,
error => this.errorMessage = <any>error);
}
}
navMenu.service
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { InavMenuTabs } from './navMenu';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/do';
@Injectable()
export class NavMenuService {
private _fileUploadAPI = 'http://localhost:50180/API/FileUpload/GetTabs/';
constructor(private _http: Http) {
}
getTabs(LinkID: number, PSNL_UID: string): Observable<InavMenuTabs[]> {
return this._http.get(this._fileUploadAPI + LinkID.toString() + '/' + PSNL_UID)
.map((response: Response) => <InavMenuTabs[]>response.json())
.do(data => console.log('All' + JSON.stringify(data)))
.catch(this.handleError);
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server Error');
}
}
navMenu.ts
export interface InavMenuTabs {
LinkTabID: number;
TabName: string;
}
【问题讨论】:
-
.subscribe(tabs => this.tabs = tabs,不会像您期望的那样返回数组,而是返回其他内容。 -
tabs 是一个数组,见代码:tabs: InavMenuTabs[]; .我是 Angular 新手,不确定我错过了什么
-
您只是将它键入为一个数组,并不意味着它是一个数组。您可以随意键入它,在运行时无所谓 :)
-
那么如何解决这个问题:)
-
您可能想检查即将到来的数据是什么样的,例如将您的订阅更改为:
.subscribe(data => { console.log(data)}),这样您就可以看到实际到达的数据类型:)
标签: angular