Javascript 在Angular中作为http请求的一部分解析JSON字符串
我使用Angular中的BehaviorSubject获取一些事件数据并将其显示到页面。作为检索数据方法的一部分,我应用以下转换来解析存储在JSON字符串中的一些数据:Javascript 在Angular中作为http请求的一部分解析JSON字符串,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我使用Angular中的BehaviorSubject获取一些事件数据并将其显示到页面。作为检索数据方法的一部分,我应用以下转换来解析存储在JSON字符串中的一些数据: return this.http .get(url) .map(response => { return response.json().data .map(ge => ge.data = JSON.parse(ge.details)); }); 应用程序检索对象,但看起来好像在呈现
return this.http
.get(url)
.map(response => {
return response.json().data
.map(ge => ge.data = JSON.parse(ge.details));
});
应用程序检索对象,但看起来好像在呈现页面后填充了数据属性。我有一些内容通过*ngIf='ge.data'
有条件地显示,但不显示。但是,当我在过程中的各个点将对象记录到控制台时,data属性就会出现
我的问题归结为:解析存储为JSON字符串的数据以便在Angular应用程序中立即可用的最佳方法是什么?问题不在于解析JSON。 问题是您正在发送一个ajax请求,并希望立即得到结果。 根据定义,处理ajax调用时不会阻止页面的呈现,并在完成时发出回调/返回承诺。
如果您想基于响应执行诸如更新图像之类的逻辑,您应该在ajax调用的回调中执行此逻辑,或者使用promise的
then()
方法执行此逻辑。我怀疑第二个映射有语法问题,因为当我将第二个映射中的逻辑拉到它自己的方法中时,它似乎像我预期的那样工作,如下所示:
http.get(url)
.map(response => response.json().data
.map(this.decode));
decode(inData: dataObj): dataObj{
inData.data = JSON.parse(inData.details);
return inData;
}
请仔细阅读文档
response.json()?不实现jsonjson
;这是在,它似乎不涉及一个承诺。它是从ResponseOptions
中获取的,它位于哪里。你可以使用类似*ngIf=ge?.data
的东西。文档中的示例使用response.json()。data
前面有一个toPromise()
@torazaburo in,toPromise
在返回的可观察对象上被调用,不在可观察对象发出的响应上。承诺在可观察对象完成时解决-发出响应
-此时身体可用json()
是一个同步方法,返回解析后的正文。这是因为现在您实际返回的是绑定到模板的数据。您确实应该使用subscribe()
函数来执行任何赋值或数据转换。