我想显示以下来自Firebase的数据

{
   "-KBN9O_qqz-nZ9tPWFdM":{
      "createdAt":1456399292790,
      "isActive":true,
      "name":"Hero 1"
   },
   "-KBN9gjJw1ZlMgt9pVsl":{
      "createdAt":1456399371220,
      "isActive":true,
      "name":"Hero 2"
   },
   "-KBN9hYI4vYAsyh5k1lX":{
      "createdAt":1456399374548,
      "isActive":true,
      "name":"Hero 3"
   }
}

例如,在做angular.io Tour of Heroes个教程时

<li *ngFor="#hero of heroes">
  <span class="badge">{{hero.id}}</span> {{hero.name}}
</li>

所以英雄id应该显示例如-KBN9hYI4vYAsyh5k1lX


我做了一些研究,发现了@Thierry Templier access key and value of object using *ngFor的stackoverflow解决方案

(1) 这是解决我问题的正确方法吗?

(2) 有没有一个更简单的解决方案来解决这个问题,因为我觉得使用Angular2的开发人员显示这样的json数据是很常见的.

推荐答案

要做到这一点,您需要实现一个自定义管道.ngFor只支持数组而不支持对象.

这根管子看起来是这样的:

@Pipe({name: 'keys'})
export class KeysPipe implements PipeTransform {
  transform(value, args:string[]) : any {
    let keys = [];
    for (let key in value) {
      keys.push({key: key, value: value[key]});
    }
    return keys;
  }
}

这样使用:

<span *ngFor="#entry of content | keys">           
  Key: {{entry.key}}, value: {{entry.value}}
</span>

有关更多详细信息,请参见此问题:

Typescript相关问答推荐

类型安全JSON解析

如何缩小变量访问的对象属性范围?

泛型类型联合将参数转换为Never

我想创建一个只需要一个未定义属性的打字脚本类型

为什么T[数字]不也返回UNDEFINED?

如何在编译时为不带常量的参数引发错误

缩小并集子键后重新构造类型

被推断为原始类型的交集的扩充类型的交集

TS如何不立即将表达式转换为完全不可变?

寻址对象中路径的泛型类型

如何 bootstrap TS编译器为类型化属性`T`推断正确的类型?

根据类型脚本中的泛型属性 Select 类型

如何定义这样一个TypeScript泛型,遍历路由配置树并累积路径

导航链接不触发自定义挂钩

如何提取具有索引签名的类型中定义的键

React-跨组件共享功能的最佳实践

什么';是并类型A|B的点,其中B是A的子类?

传入类型参数<;T>;变容函数

剧作家测试未加载本地网址

Typescript 编译错误:TS2339:类型string上不存在属性props