【问题标题】:Angular4 async pipe with ngFor带有ngFor的Angular4异步管道
【发布时间】:2018-02-03 12:06:49
【问题描述】:

我的组件中有这个ngFor

<li *ngFor="let item of items$ | async">
     {{item}}
    </li>

这是我的组件代码:

this.items$ = Observable.of(true)
    .flatMap((shouldPresentNumbers) => {
      if(shouldPresentNumbers)
         return  Observable.forkJoin(Observable.of(1,2,3,4,5));
    });

我的目标是异步渲染项目。意味着我需要items$ 将获得Observable&lt;Array&lt;any&gt;&gt; 类型的对象。 不幸的是,在运行上面的代码之后,我只得到了一个 items$ 的可观察对象(最后一个值的可观察对象 -> 5)。

如何返回 [1,2,3,4,5] 的 Observable ?

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    好的,让我们讨论一下这个结构:

    Observable.forkJoin(Observable.of(1,2,3,4,5))
    

    Observable.of() 生成一个Observable,它连续发出 5 个项目。 fork-join 一直等到它完成,然后返回最后一项,即 5。您需要的是一个包含 5 项数组的 Observable

    Observable.of([1,2,3,4,5])
    

    所以,你可以这样简化你的代码:

    this.items$ = Observable.of(true)
        .flatMap((shouldPresentNumbers) => Observable.of(shouldPresentNumbers ? [1,2,3,4,5] : []));
    

    Plunkr

    【讨论】:

    • 并假设我无法控制 Observable.of (1,2,3,4,5) ?如何以编程方式将其转换为 Observable.of ([1,2,3,4,5])?
    • Observable.of(1, 2, 3, 4, 5).toArray()
    • toArray 将创建一个可观察的对象,该可观察对象会发出整个数组。值不会一一发出。对吗?
    • 正确,它等到一个可观察对象完成然后将其所有值作为单个数组发出
    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 2020-01-15
    • 2016-02-18
    • 2018-04-18
    • 2019-12-14
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多