TypeError:无法读取属性' length' (打字稿/可观察/ angular2)

时间:2016-07-30 13:53:03

标签: typescript angular observable reactivex

我想做的事情很简单,我有一个函数text,它返回getListData的Observable,我想把它作为Person []传递给html。

所以我做到了:

Person[]

但是我收到了错误:

  

EXCEPTION:TypeError:无法读取属性' length'未定义的   [ListToDisplay in AppCmp @ 41:60]

这是我记录listToDisplay时得到的结果:

enter image description here

这就是我提出它的方式:

 @Injectable()
  export class AppCmp implements OnInit {

    listToDisplay: Person[];

    showingPerson = false;

    constructor(private _myService: MyService) {
    };

    public showMatcherData(): void {
      this.showingPerson = true;
      this. _myService.getListData().subscribe(res => {
        this.listToDisplay = res;
      })
    }

如果我正在使用person2:

<div *ngIf="showingPerson">
    <div dnd-sortable-container  [dropZones]="['zone-one']" [sortableData]="listToDisplay">
      <div class="list-bg" *ngFor="#per of listToDisplay; #i = index" dnd-sortable [sortableIndex]="i">
        ID: {{per.id}} <p></p> age: {{per.age}}
      </div>
    </div>
  </div>

而不是listToDisplay它有效,怎么样?

这是什么意思,我该如何解决?

1 个答案:

答案 0 :(得分:1)

问题可能与此sortableData

有关
<div dnd-sortable-container  [dropZones]="['zone-one']" [sortableData]="listToDisplay">

而不是*ngFor

你应该只展示整件事:

<div *ngIf="showingPerson">

(也就是说,在 加载数据之后更改*ngIf处的标记,而不是像现在这样。

所以这个:

public showMatcherData(): void {
  this.showingPerson = true;   // <------------------------------ line will move
  this. _myService.getListData().subscribe(res => {
    this.listToDisplay = res;
  })
}

应该成为:

public showMatcherData(): void {
  this. _myService.getListData().subscribe(res => {
    this.listToDisplay = res;
    this.showingPerson = true; // <------------------------------ line moved
  })
}