如何显示以下Hero对象的ID和标题? 下面的Hero界面根据Firebase JSON响应进行映射。
hero.component.ts
import {Component, Input} from 'angular2/core';
import {Hero} from '../model/hero';
@Component({
selector: 'hero-component',
template: `
{{hero | json }} this works. This display the Firebase JSON response as seen below
<br>
{{ Object.keys(hero)[0] }} this DOESN'T work
<br>
{{ hero[Object.keys(hero)[0]].title }}this also DOESN'T work
`
})
export class HeroComponent {
@Input()
hero:Hero;
}
hero.ts
export interface Hero {
[id: string]: {
createdAt: number;
isActive: boolean;
title: string;
updatedAt: number;
}
}
Firebase JSON响应
{ "-KEMOfA5KFK98AXNhPY0": { "createdAt": 1459607745222, "isActive": true, "title": "Wind Hero", "updatedAt": 1459607745222 } }
答案 0 :(得分:0)
<强>更新强>
而不是pipes: [KeysPipe]
使用
@NgModule({
declarations: [KeysPipe],
exports: [KeysPipe],
}
export class SharedModule{}
@NgModule({
...
imports: [SharedModule],
})
<强>原始强>
您无法在模板中使用Object.keys(hero)[0]
。不能使用全局引用,只能使用组件的成员。
而是在组件上创建一个函数
getKeys(obj) {
return Object.keys(obj);
}
然后在模板中
{{ getKeys(hero)[0] }}
或者,您可以构建一个提取密钥的管道,例如https://stackoverflow.com/a/34074484/217408
@Pipe({ name: 'keys', pure: false })
export class KeysPipe implements PipeTransform {
transform(value: any, args: any[] = null): any {
return Object.keys(value);
}
}
然后像
一样使用它{{ (hero | keys)[0] }}
不要忘记将管道添加到要使用它的组件上的pipes: [KeysPipe]
,或者
bootstrap(App, [provide(PLATFORM_PIPES, {useValue: KeysPipe, multi:true})]);
答案 1 :(得分:-1)
由于您的组件中没有Object
,您的代码无效。
您可以尝试这样的事情:
@Component({
selector: 'hero-component',
template: `
{{hero | json }} this works. This display the Firebase JSON response as seen below
<br>
{{ obj.keys(hero)[0] }} this DOESN'T work
<br>
{{ hero[obj.keys(hero)[0]].title }}this also DOESN'T work
`
})
export class HeroComponent {
@Input()
hero:Hero;
obj = Object;
}
或使用像Günter这样的方法在他的回答中提出。