如何在Angular 2模板中迭代可观察的数组流?

adr*_*nmc 1 javascript typescript angular

我正在使用ng2-redux,我正在尝试显示短语/单词列表.在下面的代码示例中,您可以看到我使用@select装饰器来获取单词/短语并将其放入phrases$observable中.

从官方ng-redux教程开始,我可以使用异步管道运算符按原样显示数组.因此,如果短语的商店看起来像这样['one', 'two', 'three'],输出是这样的:one, two, three.这就是代码的样子:

import { Component, OnInit } from '@angular/core';

import { select } from 'ng2-redux';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-typing',
  template: `
    <h2>List of Phrases</h2>
    <div>{{ phrases$ | async }}</div>
  `,
})
export class TypingComponent implements OnInit {

  @select('phrase') phrases$: Observable<number>;

  constructor() {}

  ngOnInit() {}

}
Run Code Online (Sandbox Code Playgroud)

但我的目标不是在一行中显示单词.我想显示单词,*ngFor所以我可以在它们上面做更复杂的样式.所以,而不是{{ phrases$ | async }},可能是这样的:

<div *ngFor="let phrase in phrases$">
  <div>{{phrase}}</div>
<div>
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它phrases$是一个可观察的而不是一个数组.如何更改上面的内容以便我可以迭代数组本身?

car*_*ant 6

如果phrases$发出数组,则类型似乎不正确.不应该是:

@select('phrase') phrases$: Observable<number[]>;
Run Code Online (Sandbox Code Playgroud)

如果它确实发出了一个数组,你可以async像这样使用管道:

<div *ngFor="let phrase in phrases$ | async">
  <div>{{phrase}}</div>
<div>
Run Code Online (Sandbox Code Playgroud)