如何在 Angular 2 中正确从 http.get 中提取 JSON 数据?

2024-01-08

我似乎无法使用 json 文件中的信息为视图创建一个变量,但我已经很接近了。我可以回显中的信息.subscribe()-chain,但它不会将其设置为变量,它们只是未定义,我做错了什么?

我只想将 json 文件加载到组件视图中的变量中。在 Angular 1 中这很容易。

我的服务:

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

@Injectable()
export class GullkornService { 
result: any;

constructor(private http:Http) {
}

getGullkorn()  {

let result = this.result;
this.http.get('./gk/gullkorn.json')
.map(res => res.json())
.subscribe(
        val => this.result = val,
        err => console.error(err),
        () =>  console.log(this.result));  // this one echoes out what i want
        console.log(this.result); // but this one doesnt, so i cant return it 
      }
}

以及着陆组件:

import { Component, OnInit } from '@angular/core';
import {Router, RouterOutlet} from '@angular/router';
import { HttpModule, JsonpModule } from '@angular/http';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule }      from '@angular/core';
import { GullkornService } from '../../gullkorn-service.service';
import { FormsModule }   from '@angular/forms';
import {Observable} from 'rxjs/Observable';

import "gsap";
declare var ease, TimelineMax,TweenMax,Power4,Power1,Power2,Power3,Bounce, Elastic:any;

@Component({
  selector: 'gullkorn-visning',
  providers: [GullkornService],
  templateUrl: './landing.component.html',
  styleUrls: ['./landing.component.css']
})
export class LandingComponent implements OnInit {
  gullkorn: any;
  constructor(GullkornService: GullkornService) { 
        this.gullkorn = GullkornService.getGullkorn();
        console.log(this.gullkorn);
  }

  ngOnInit() {
  }

}

根据当前代码,这是我得到的:

我这里有这个项目:github https://github.com/ekstremedia/eks-app-2017/blob/master/src/app/gullkorn-service.service.ts.


这是一个异步操作,因此当您尝试 console.log 结果时,它是未定义的,因为它是在订阅内的其他 console.log 之前运行的。

.subscribe(
        val => this.result = val,
        err => console.error(err),
        () =>  console.log(this.result));  // is run sometimes later
        console.log(this.result); // is run first
      }

我会对您的代码进行一些更改...我建议您改为处理组件中的订阅,这将是处理 http 请求的最佳方式。所以就map在服务中并将可观察值返回给组件,记得添加return陈述 :

getGullkorn() {
  return this.http.get('./gk/gullkorn.json')
    .map(res => res.json())
}

在您的组件中,我建议您将服务呼叫移入OnInit反而。在这里您还可以注意到,根据代码中的注释,无法在订阅之外立即访问这些值。因此,如果您想以某种方式操纵数据,则需要考虑到这一点:)

ngOnInit() {
  this.GullkornService.getGullkorn()
    .subscribe(data => {
     // is run sometimes later
     this.gullkorn = data
  });
  // is run first
}

因为这是一个异步操作,所以准备使用ngIf或者安全导航操作员 https://angular.io/docs/ts/latest/guide/template-syntax.html#!#safe-navigation-operator在您看来,因为视图是在检索数据之前呈现的。

所以要么把你的代码包装在里面ngIf:

<div *ngIf="gullkorn"></div>

or {{gullkorn?.someProperty}}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 2 中正确从 http.get 中提取 JSON 数据? 的相关文章

随机推荐

  • Python字典和集合内存分配

    I found 这个优秀的资源 https www safaribooksonline com library view high performance python 9781449361747 ch04 html讨论 python 字典
  • 如何在 Cypress 中存储图像的 src 并将其与另一个图像进行比较?

    测试目标是确认如果用户上传新图像 则上传图像的 src 属性会发生更改 这意味着图像已更改 我尝试使用几种方法 概述如下 第一种方法 cy get img then img gt store the src const source img
  • Chrome 会混淆使用 SVG 格式的网络字体设计的文本(有时)

    Demo http jsbin com onixik 2 http jsbin com onixik 2 内容如下 如果您在 Windows 上的 Chrome 中检查该演示 它可能看起来不错 也可能不太好 我所说的 OK 是指它并不引人注
  • 更改 tkinter 中的输入框背景颜色

    所以我一直在研究这个程序 但我发现很难找出问题所在 我对 tkinter 还很陌生 所以这可能很小 我试图让程序在按下复选按钮时更改输入框的背景颜色 或者更好的是 如果我可以动态地改变它 那就更好了 这是我目前的代码 TodayReadin
  • 在Java中无损JPEG旋转(90/180/270度)?

    是否有一个 Java 库可以以 90 度的增量旋转 JPEG 文件 而不会导致图像质量下降 我找到了这个 http mediachest sourceforge net mediautil http mediachest sourcefor
  • 使用 Azure 管道在特定的自托管服务器上运行

    在 Azure git 中 我正在运行一些自托管代理 它们位于名为 默认 的池中 在 Azure 管道 yml 文件 中 我可以告诉作业它必须在特定代理中运行 如下所示 pool name Default demands Agent Nam
  • 假装电报机器人正在打字?

    如何让机器人假装正在输入消息 当机器人假装打字时 聊天中会出现以下文本 我用的是蟒蛇aiogram https github com aiogram aiogram框架 但对原生 Telegram API 的建议也会有所帮助 我认真建议使用
  • MySQL CSV 导入 - 如果时间戳有毫秒,则日期输入为 0000-00-00 00:00:00?

    我目前有大量 CSV 需要导入到 MySQL 数据库中 这些文件包含每条记录的时间戳 其格式如下 例如 2011 10 13 09 36 02 297000000 我知道 MySQL 错误 8523 它表明不支持在日期时间字段中存储毫秒 尽
  • 如何强制 GCC 假定浮点表达式为非负?

    在某些情况下 您知道某个浮点表达式始终为非负数 例如 当计算向量的长度时 sqrt a 0 a 0 a N 1 a N 1 NB I am意识到std hypot 这与问题无关 并且平方根下的表达式显然是非负的 然而 海湾合作委员会outp
  • NHibernate WinForms 应用程序使用哪个缓存

    我有一个带有数据库后端 oracle 的 C WinForms 应用程序 并使用 NHibernate 进行 O R 映射 我想尽可能减少与数据库的通信 因为这里的网络非常慢 所以我阅读了有关二级缓存的内容 我发现这个很好的介绍 http
  • ELB 和 ECS 集群前面的 Amazon API Gateway

    我尝试将 Amazon API Gateway 放在应用程序负载均衡器前面 该负载均衡器可以平衡到我的 ECS 集群的流量 我的所有微服务都部署在该集群上 使用 API 网关的动机是通过 lambda 函数使用自定义授权方 系统图 用亚马逊
  • Asp.Net Core 1.1 在密钥环中找不到密钥

    VS 2017 中的默认项目 https i stack imgur com Y12YS jpg我在 vs 2017 社区中创建了一个新的 Asp net Core Web 应用程序并将其发布到 FTP 托管上 但是当我提交表单 登录或用户
  • 幂律与其他分布的比较

    我正在使用 Jeff Alstott 的 Python powerlaw 包来尝试使我的数据符合幂律 Jeff 的软件包基于 Clauset 等人讨论幂律的论文 首先 我的数据的一些详细信息 它是离散的 字数数据 它严重向左倾斜 高偏度 I
  • 如何在不阅读的情况下获取文件中的行数[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速统计行数 https stackoverflow com questions 6101367 how to count lines fast 我有一些文件逐行包含数据 我想获取文件中的行数以向
  • 通过比较 2 个列表/行的相似度进行图像旋转匹配 OpenCV Python

    我拿一个模板 并从中抽取 8 个点 现在为 36 个 每个小点都是一个掩模 我从那个小点区域中取平均值 然后将它们添加到列表中 它最终看起来像这样 203 176 160 174 185 185 152 136 131 131 131 13
  • 在 Groovy 中计算赋值表达式

    我有这样的表达 def expr anything something 就我而言 上面的字符串来自网络服务 但它可能来自任何地方 我想对此进行评估 以便最终得到具有 某物 值的变量 anything 这样 assert anything s
  • 为什么克隆的存储库比获取的存储库大 10 倍?

    我们有一个远程仓库 其大小已经爆炸 1 4G 到 14G 我们正在尝试找出此存储库大小增加的原因并解决问题 在这个过程中我们注意到 git clone 和 git fetch 之间的显着差异 如果我们克隆仓库 克隆的仓库也是 14G git
  • 发布 Google Apps 脚本库

    我对如何发布新库有点困惑 我为 Google Apps 脚本创建了一个我认为非常酷且有用的库 google api client https docs google com macros library versions d M5CBUAH
  • 在缩放模式 Picturebox 中平移矩形位置会导致负 Y 坐标

    我正在使用以下类参考 在缩放模式 Picturebox 中平移矩形位置 https stackoverflow com questions 53800328 translate rectangle position in zoom mode
  • 如何在 Angular 2 中正确从 http.get 中提取 JSON 数据?

    我似乎无法使用 json 文件中的信息为视图创建一个变量 但我已经很接近了 我可以回显中的信息 subscribe chain 但它不会将其设置为变量 它们只是未定义 我做错了什么 我只想将 json 文件加载到组件视图中的变量中 在 An