当前位置: 首页 > 知识库问答 >
问题:

Angular2-如何使用非阵列结果的异步管道?

季凡
2023-03-14

在这个Plunker中,我有一个模板:

 <span *ngFor="let a of Articles">{{a}}</span>

这是组件类:

export class App
{
    Articles: number[];
    constructor()
    {
        this.getData();
    }
    simualteDb()
    {
        return new Promise((a, b) =>
        {
            setTimeout(function()
            {
                a(
                {    // notice , an object ,not an array
                    data: [0, 1, 2]
                });
            }, 500)
        });
    }
    async getData()
    {
        this.Articles = (await this.simualteDb()).data;
    }
}

这确实有效,我确实在输出中看到了012。但是我想使用async管道。

因此,我希望我的模板是:

 <span *ngFor="let a of Articles |async ">{{a}}</span>

但是有一个问题。

文章不是数组。它是一个具有dataprop的对象,该属性是必需的数组。

我不能这样做:

   <span *ngFor="let a of Articles.data |async ">{{a}}</span>

我创建了另一个plunker,它只返回一个数组:

而且它可以与| async一起工作。

问题:

看看我的第一个代码,我如何使用异步管道,同时仍然解析一个对象而不是一个数组?

{data: [0, 1, 2]} 

共有1个答案

涂玉韵
2023-03-14

为您提供了使用异步管道的另一个选项(您提到了您想要的),这意味着您需要一个可观察的工具来使用...服务返回可观察:

getArticles() {
  return this.http.get('url')
    .map(res => res.json())
}

在组件中,指定可观察到的:

ngOnInit() {
  this.Articles = this.service.getArticles()
}

然后,您可以在视图中使用异步管道,如下所示:

<div *ngFor="let a of (Articles | async)?.data">{{a}}</div>

演示

 类似资料:
  • 问题内容: 我在自己的类中拥有所有异步调用,因此我不想将aync’ly设置为全局变量。为此,我想从我的asunc postProcess方法返回对象,例如字符串。 能做到吗? 下面是我类的一般结构,例如,我想从onPostExecute()返回一个字符串。我看到在其他地方提到了委托,但这似乎很混乱,确定有办法为类或方法提供返回类型吗? 问题答案: 像下面这样 和听众课 你可以这样打电话

  • 我(大部分)了解CompletableFuture的三种执行方法: 非异步(同步执行) 默认异步(使用默认执行器异步) 自定义异步(使用自定义执行器异步) 我的问题是:什么时候应该支持使用非异步方法? 如果您有一个调用其他方法的代码块,该代码块也返回CompletableFuture,会发生什么?表面上看,这可能很便宜,但如果这些方法也使用非异步调用,会发生什么?这难道不是一个很长的非异步块,可能

  • 在我看来,有一个与控制器的一个功能链接的输入文件 此函数调用服务中的一个函数,该函数假定将我的xml文件转换为json 在服务函数中,XML文件在文件读取器中读取,然后在文件读取器的onloadend部分转换为XML 如何在onloadend中检索转换后的json结果,以便在Angular控制器中使用它,特别是在promise的情况下?或者我应该使用setTimeout吗?

  • 我想在过滤器返回空数组时显示一条消息,例如“未找到结果” 这是我的ngFor列表,它有一个过滤器 如果没有过滤器,这很容易,但是因为有过滤器,我不知道怎么说过滤器没有返回结果。 这是我的过滤器: 这一切都有效,但我只需要向用户显示,过滤器没有返回结果,而是返回消息,而不是空屏幕。

  • 当导航到带有防护装置的页面时,已或都会打印到控制台(在等待 firebase 响应的一段时间后)。但是,导航永远不会完成。另外,如果我没有登录,我会被重定向到路由。因此,我遇到的问题是 不会向用户显示请求的页面。我假设这是因为我正在使用回调,但我无法弄清楚如何做到这一点。有什么想法吗?

  • 问题内容: 使用promise API,如何并行发送两个异步请求,以及如何将合并的结果解析为响应。 现在,当我像这样调用get()时 我需要获得指示的合并结果。如何使用Angular promise API做到这一点? 问题答案: 正如@Matt所说,您需要使用,但用法并不完全正确。AngularJS不支持,并且它们无论如何都不能那样工作,因为没有诸如对多个值的承诺之类的东西,相反,您仅对数组有一