访问Angular2中的Typescript对象变量

时间:2016-04-07 16:23:50

标签: json typescript firebase angular

如何显示以下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 } } 

2 个答案:

答案 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这样的方法在他的回答中提出。