【问题标题】:How to use property binding with asynchronous data?如何将属性绑定与异步数据一起使用?
【发布时间】:2019-04-26 12:07:52
【问题描述】:

我正在尝试将现有的前端与新的后端连接起来。其中一个前端组件具有以下模板:

<simplex-chart [numbers]="someData"></simplex-chart>

现有的前端是一个原型,其中数据是静态的。在新版本中,数据不再是静态的,而是来自数据库,通过服务。因此,上面的属性绑定不再起作用。 我怎样才能使它适应异步传输的数据?我见过像 {{ somedata | async }} 但我没有找到任何方法将其绑定到输入属性。 有什么建议吗? 提前谢谢了, 尼古拉斯

【问题讨论】:

    标签: angular angular7 property-binding


    【解决方案1】:

    当您还没有来自父级的数据时,尝试使用@Input()numbers: number[] = []; 将空数组作为默认值。

    【讨论】:

      【解决方案2】:

      尝试以下方法:

      <ng-container *ngIf="someData | async as data"> 
         <simplex-chart [numbers]="data"></simplex-chart>
      </ng-container>
      

      【讨论】:

        【解决方案3】:

        如果someData 是可观察的,您可以使用管道 async 执行以下操作:

        <simplex-chart [numbers]="someData | async"></simplex-chart>
        

        有关管道异步的更多信息:

        https://angular.io/api/common/AsyncPipe

        更新:

        看到simplex-chart 使用@Input() numbers: number[],您可以添加一个ngIf,直到加载数据。它看起来像这样:

        <simplex-chart *ngIf="someData" [numbers]="someData"></simplex-chart>
        

        【讨论】:

        • 我在发布之前尝试过,但它不起作用,引发以下异常:ERROR 错误:InvalidPipeArgument: for pipe 'AsyncPipe' at invalidPipeArgumentError (common.js:4013) at AsyncPipe.push。 ./node_modules/@angular/common/fesm5/common.js.AsyncPipe._selectStrategy (common.js:4624) at AsyncPipe.push ../node_modules/@angular/common/fesm5/common.js.AsyncPipe._s .. . 不,someData 不是 Observable,而是一个由组件代码从 Observable 订阅的数字数组。
        • 你能在stackblitz.com上做一个例子吗?正如错误所说, someData 是一个数组,那么,当您直接输入 &lt;simplex-chart [numbers]="someData"&gt;&lt;/simplex-chart&gt; 时,您遇到的错误是什么?似乎您不需要管道,因为您直接使用数组
        • 是的,我确认 someData 是一个数字数组。错误是:“错误类型错误:无法读取未定义的属性 'map'”。引发异常的源代码行是:“data: this.numbers.map(p => p - 15)”,其中 numbers 是“@Input()numbers: number[];”我将提供一个例子。
        • 我的理解是 ngif 只会执行测试,但不会管理数据的异步字符。当然,这样做会花费更多时间,这可能会给之前完成操作提供更多机会。但我认为这不是解决方案。
        • 它检查值是否存在,如果有值则呈现单纯形图
        猜你喜欢
        • 1970-01-01
        • 2020-09-22
        • 2019-02-10
        • 2016-04-15
        • 2018-03-27
        • 2020-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多