【问题标题】:Angular 2 *ngFor ErrorAngular 2 *ngFor 错误
【发布时间】: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 =&gt; this.tabs = tabs, 不会像您期望的那样返回数组,而是返回其他内容。
  • tabs 是一个数组,见代码:tabs: InavMenuTabs[]; .我是 Angular 新手,不确定我错过了什么
  • 您只是将它键入为一个数组,并不意味着它是一个数组。您可以随意键入它,在运行时无所谓 :)
  • 那么如何解决这个问题:)
  • 您可能想检查即将到来的数据是什么样的,例如将您的订阅更改为:.subscribe(data =&gt; { console.log(data)}) ,这样您就可以看到实际到达的数据类型:)

标签: angular


【解决方案1】:

嗯,看看你的 cmets,这就解释了。您传入的数据不是一个数组,而是一个名为result 的对象,因此您必须从该对象中获取内容并将其存储在您的数组中。

当您映射传入的数据时,它会显示:

{"result":[{"LinkTabID":1,"TabName":"Upload File"}]}

这是一个包含数组的对象。所以你必须从你的对象中获取那个数组。

ngOnInit(): void {
    this._navMenuService.getTabs(1, 'XXXX')
        .subscribe(
           data => {
             this.tabs = data.result
           });
}

【讨论】:

  • 当我把这个 ngOnInit(): void { this._navMenuService.getTabs(1, 'ciiw') .subscribe( data => { this.tabs = data this.tabs = JSON.parse( this.tabs.result) //.result 中的错误 }, error => this.errorMessage = error); ///////////////////////////////////////// ///////////////////////////////////////// ////////////JSON.parse(this.tabs.result) 导致错误this.tabs.result
  • 完全按照我写的方式复制上面的代码,它应该可以工作,你当前的代码也是你旧代码的混搭。
  • 对不起,我明白了,当我这样做时,我得到另一个异常:JSON 中的意外标记 o 在位置 1ErrorHandler.handleError @ core.umd.js:2838 core.umd.js:2843 ORIGINAL STACKTRACE: ErrorHandler.handleError@core.umd.js:2843
  • 好吧,我自己搞砸了,抱歉。更新了我的答案,现在它应该像我在答案中写的那样工作:)
  • 我刚刚接受,我不知道该怎么做,因为我知道打字。参加了巡回演出,并且能够做到:)
猜你喜欢
  • 2017-11-03
  • 2016-09-24
  • 2017-09-20
  • 2018-02-22
  • 2017-12-22
  • 2018-10-13
  • 2018-06-01
  • 2018-04-25
  • 2017-05-07
相关资源
最近更新 更多