0

監視可能なコレクションにバインドできない 6.3 の NGX データ テーブルを使用しています。Angular Observable Collection を通常の非観察可能配列に変換するにはどうすればよいですか?

これが私がサービスのために持っているものです:

private _productUrl = '../../api/todos/todos.json';

constructor(private _http: Http) { }

getToDos(): Observable<IToDo[]> {
    return this._http.get(this._productUrl)
        .map((response: Response) => <IToDo[]> response.json())
        .do(data => console.log('All: ' +  JSON.stringify(data)))
        .catch(this.handleError);
}

これがcomponent.ts用のものです。foreach ループでエラーが発生します:未定義のプロパティ '長さ' を読み取れません

ngOnInit() {
    this._toDoService.getToDos()
        .subscribe(
          toDos => this.toDos = toDos,
          error => this.errorMessage = <any>error);

    this.rows = this.transform(this.toDos);
}

transform(source: IToDo[]): IToDo[] {
    let dest: IToDo[] = [];

    for (let sourceItem of source)
    {
      let destItem: IToDo = {
        toDoId: sourceItem.toDoId,
        name: sourceItem.name,
        priority: sourceItem.priority,
        dueDate: sourceItem.dueDate,
        completed: sourceItem.completed
      };
      dest.push(destItem);
    }

    return dest;
}
4

2 に答える 2

2

Observable は非同期である可能性があるため、サブスクリプション呼び出しの直後に todo を単純に操作することはできません。代わりに、サブスクリプション内で todo を操作します。

ngOnInit() {
  this._toDoService.getToDos()
    .subscribe(
      toDos => {
        this.toDos = toDos
        this.rows = this.transform(this.toDos);
      },
      error => this.errorMessage = <any>error);
}

this.transform 呼び出しは同期的に呼び出されていました。つまり、呼び出しスタックは呼び出しの直線的な進行です。

于 2017-03-29T17:35:55.763 に答える