使用Angular 2显示来自JSON的数据-可观察和异步

山姆·凯勒姆

我有一个简单的Angular 2服务,正在调用本地JSON文件。我可以在general.service.ts中的.map函数中将对象添加到console.log。但是,由于异步调用的性质,我似乎无法从对象中打印出单个键或值。这是我的代码。

我知道我需要包含* ngIf,因为它是异步的。但是,即使我已经将ngIf与引用了component.ts的'generalInfo'一起使用了

一般服务

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';

import { General } from '../interfaces/general.interface'

@Injectable()
export class GeneralService {
  private dataAPI = '../../assets/api.json';

  constructor(private http: Http) {

  }

  getGeneralData() : Observable<General> {
    return this.http.get(this.dataAPI)
      .map((res:Response) => { res.json(); console.log(res.json())})
      .catch((error:any) => Observable.throw(error.json().error ||     'Server error'));
  }
}

header.component.ts

import { Component, OnInit, DoCheck } from '@angular/core';
import 'rxjs/add/operator/map';
import { GeneralService } from '../../services/general.service';

@Component({
  selector: 'header',
  templateUrl: `./header.component.html`
})

export class headerComponent implements OnInit{

  public generalInfo : any;
  public name : string;

  constructor(
    private headerblock: GeneralService
  ) {}

  //Local Properties
  header;

  loadHeader() {
    this.headerblock.getGeneralData()
      .subscribe(
        generalInfo => {
          this.generalInfo = generalInfo;
          this.name = this.generalInfo.name
        },
        err => {
          console.log(err);
        }
      );

  }

  ngOnInit() {
    this.loadHeader();
  }
}

header.component.html

<div class="container">
  <div *ngIf="generalInfo">
     {{name}}
  </div>
</div>

尽管目前使用此代码-它不会进入if语句。我不确定为什么这行不通?

xi

*ngIf未执行,则map-function的原因未返回任何内容。

因此,在您的subscribe函数中,传入值是undefined

您必须在map函数内返回一些内容:

.map((res:Response) => { console.log(res.json()); return res.json(); })

然后在模板中像这样使用它:

{{ generalInfo.name }}

假设generalInfo具有名为的属性name

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将可观察对象中的数组与ngFor和Async Pipe Angular 2一起使用

Angular2可观察和无极

扩展Angular 2 ngModel指令以使用可观察对象

Angular2 http.get(),map(),subscribe()和可观察模式-基本理解

Angular 2-显示来自Promise的异步对象数据

Angular 2中异步可观察和管道上的安全导航操作员

Angular2-* ngIf和异步可观察对象

使用rxjs和angular2创建自己的可观察对象

可观察的。使用异步任务

异步管道未显示可观察到的数据

Angular 5,可观察和异步功能

可观察的Angular [karma]异步测试

使用mat-paginator和mat-table,使用可观察数组作为数据源

rxjs:结合可观察到的结果,同时已经使用异步管道显示了第一个

使用异步管道显示基于计时器的可观察对象的显示加载指示器

Angular / angularfire2-读取可观察的文档并将数据保存到对象。没有异步管道

Angular 2-可观察和异步HTTP加载

在Angular 2视图中显示可观察的嵌套数据

角度可观察的Angular2异步管道

可观察。使用和异步流获取损坏的数据

Angular2 http调用和典型的可观察到的问题

在Angular 2中共享和更新可观察数据

Angular2 可观察和访问后响应

角度 2 异步可观察 @Input

使用 vuejs 和 axios 显示来自 JSON API 的数据

如何在 Angular 5 中使用 rxJS 存储来自 API 的可观察数据?

带有可观察异步的 Angular if 语句

Angular 11 - 如何使用服务传递可观察的数据

angular - 为什么不推荐在订阅/可观察对象上使用数据和错误?