Angular2(rc.6)JSON对象键未被访问

时间:2016-09-12 18:03:14

标签: json angular angular2-observables

我开始了我的第一个Angular2(rc.6)项目。 我有一个成功发送到组件的JSON对象,但我无法访问模板中的键值。

服务(摘录):

@Injectable()
export class SongService {
  constructor(private http: Http) { }

  getSong(id: number): Promise<Song> {
    let url = '/maxapirest/v1/maxmusic/song/'+id
    console.log(url)
    return this.http
      .get(url)
      .toPromise()
      .then(function(response) {
          console.log(response.json());
          return response.json();
      } )
  }

COMPONENT(摘录):

@Component({ 
  selector: 'my-song-reading',
  templateUrl: STATIC_URL+'song-reading.component.html',
  providers: [ SongService ],
})  

export class SongReadingComponent implements OnInit {
  song: Promise<Song>;
  constructor(
    private songService: SongService,
    private route: ActivatedRoute) { }

  ngOnInit(): void {
    this.route.params.forEach((params: Params) => {
      if (params['id'] !== undefined) {
        let id = +params['id'];

        this.song = this.songService.getSong(id)
      }
    });

  }

模板(摘录):

<div *ngIf="song">
    {{ song | async | json }}<br/><br/><br/>
    {{ song.title | async}}
    {{ song.image | async }}
    {{ song.id | async}}
</div>

我无法弄清楚的问题是{{song | json}}正确输出一个JSON对象: {&#34; id&#34;:71,&#34; title&#34;:&#34;它不是意味着什么&#34; ...} 并且不会抛出任何错误。 但其他var键不会被渲染。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要使用.then(...),然后在那里指定值:

  ngOnInit(): void {
    this.route.params.forEach((params: Params) => {
      if (params['id'] !== undefined) {
        let id = +params['id'];

        this.songService.getSong(id)
        .then(json => {
          this.song = json;
        });
      }
    });
  }