【问题标题】:Angular - Displaying Object within Object in jsonAngular - 在json中的对象内显示对象
【发布时间】:2018-05-17 17:14:58
【问题描述】:

我正在尝试使用 angular ngFor 来解析这些数据:

链接:https://blockchain.info/rawaddr/3MvuMn4CESuvA89bfA1cT8mgC4JtKaReku

我可以通过订阅它来很好地检索数据,但是当我尝试显示其中包含对象的属性时。我收到 [object, Object]。

我目前是如何尝试的

<div *ngFor="let t of transactions" >
  <mat-card class="example-card">
    <mat-card-header>
      <mat-card-title></mat-card-title>
    </mat-card-header>
    <mat-card-content>
      <table class="table">
        <thead>
          <tr>
            <th scope="col">From</th>
            <th scope="col">To</th>
            <th scope="col">Receiver</th>
            <th scope="col">Hash</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>{{t.inputs}}</td>
            <td>-></td>
            <td>{{t.out}}</td>
            <td></td>
          </tr>
        </tbody>
      </table>

组件.ts

export class InputComponent implements OnInit {

  address = "3MvuMn4CESuvA89bfA1cT8mgC4JtKaReku";
  transactions: any ;
  inputs: any;
  public arrayOfKeys
  constructor(private blockchain: BlockchainService) { }

  ngOnInit() {
  }

  submit(){
    console.log(this.address)
  }

  getTransactions(){
    this.blockchain.getTransactions().subscribe((data) => {
      this.transactions = data["txs"]
      console.log(this.transactions)
      console.log(this.transactions['inputs'])

    });
  }
}

用 console.log 做一个简单的测试,看看 this.transactions['inputs'] 是否给了我一个 undefined

下面的新尝试。它离工作更近了,但还没有完全实现。

<div *ngFor="let t of transactions">
    <div *ngFor="let field of t.inputs ; let i = index">
        <p>{{ field.sequence }}</p>
        <p>{{ field.witness}}</p>
        {{i}}
        {{field.prev_out[i].addr}}
        <hr>
        <div *ngFor="let out of field.prev_out">
          {{out.addr}}
          </div> 
    </div>
</div>

它给我的错误

ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

【问题讨论】:

标签: javascript node.js angular npm


【解决方案1】:

嗯,这是因为 t.inputst.out 是对象而不是字符串。如果您只想显示纯文本数据,则可以使用 anuglarjs 的“json”过滤器或使用“JSON.stringify”将这些值转换为字符串

使用 angularjs json 过滤器 -

<pre>{{ {'name':'value'} | json }}</pre>

【讨论】:

  • 它被标记为angular 我不确定这是否适用于角度
  • @VincentNguyen 是的。
【解决方案2】:

因为inputsout 是对象。您必须执行{{ t.inputs.fieldYouWant }} 才能获得input 对象的某个字段。

如果您想要整个 input,则必须将其存储在您的组件中并在其上执行 ngFor

我不确定你是否可以这样做,但你可以尝试一下:

<div *ngFor="let t of transactions">
     <div *ngFor="let field of t.inputs">
         {{ field }}
     </div>
</div>

【讨论】:

    【解决方案3】:

    用 console.log 做一个简单的测试,看看 this.transactions['inputs'] 是否给了我一个 undefined

    快速解决方案 如果您在控制台中获取日期而不是未定义,则获取数据的方法可能是错误的。 getTransactions() 中的数据对象是未定义类型。而不是t.out,而是通过编写t['out'] 为变量resp 赋值,在您的组件中给出完整的名称,例如['inputs']['0']['sequence']。比在component.html中使用resp

    解决方案

    通过为 json 定义 interface 来转换结果数据,然后使用 . 访问值

    【讨论】:

      【解决方案4】:

      t.inputs 不是一个对象,它是一个对象数组。所以我认为这应该可行。

      <div *ngFor="let t of transactions">
      <div *ngFor="let field of t.inputs ; let i = index">
          <p>{{ field.sequence }}</p>
          <p>{{ field.witness}}</p>
          {{i}}
          <hr>
          {{field.prev_outt.addr}}
      </div>
      </div>
      

      【讨论】:

      • 嗨,这适用于输入。但我也试图访问输入属性中的对象“prev_out”。特别是“地址”。我尝试在循环中输入另一个 ngFor 来访问它的 prev_out 对象,但它没有显示任何内容。
      • 不知道他为什么只是复制/粘贴我的答案,但是......你确定另一个 `
        不起作用吗?@tenkdarko
      • @VincentNguyen 是的,我更新了我当前使用的代码。请提供反馈。 ERROR 错误:找不到类型为“object”的不同支持对象“[object Object]”。 NgFor 只支持绑定到 Arrays 等 Iterables。
      • @tenkdarko 这个错误意味着你不能迭代prev_out,因为它不是一个数组。它是一个对象。我建议您将 prev_out 作为变量存储在您的 component.ts 中,然后在模板中迭代该变量,这样会更简洁。
      • transactionstransaction.inputs 都是对象数组
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签