gpt4 book ai didi

javascript - Angular2 奇怪的硬编码对象与 http.get 对象问题

转载 作者:行者123 更新时间:2023-12-03 07:32:29 25 4
gpt4 key购买 nike

我有相同的 JSON 数据,保存在 .ts(硬编码)和 .json(http get)中。这两个对象在开发控制台中看起来相同。

我可以使用“{{beatlesjson | json}}”和“{{beatlesjson.paul | json}}”打印从外部JSON检索的数据,但我无法打印“{{beatlesjson.paul.name | json}” }”,它会进一步破坏应用程序的执行。

当使用相同的 JSON 但在 TS 文件中硬编码时,前面的段落可以按预期工作。

PS。我注意到,如果我不启动,我什至无法打印对象和第一个子级别:beatlesjson:Object = {};最初。但它仅适用于顶层和第一层,但在对象的第二个子层上会中断。

import {Component,ElementRef,AfterViewChecked,enableProdMode} from 'angular2/core'; enableProdMode();
import {Http, Response, RequestOptions, Headers, HTTP_PROVIDERS, HTTP_BINDINGS} from 'angular2/http';

@Component({
selector: 'my-app',
template: `

<pre>

WORKS {{ beatles | json }}
WORKS {{ beatlesjson | json }}
<hr>

WORKS {{ beatles.paul | json }}
WORKS {{ beatlesjson.paul | json }}
<hr>

WORKS {{ beatles.paul.name | json }}
<!-- BREAKS FURTHER EXEC, DOES NOT WORK {{ beatlesjson.paul.name | json }} -->
<hr>

</pre>

`
})

export class AppComponent {

beatles: Object = {};
beatlesjson: Object = {};

constructor(http: Http){

this.beatles = {
john: {
name: 'John Lennon',
description: 'Imagining all the people',
deceased: true
},
paul: {
name: 'Paul McCartney',
description: 'Believes in Yesterday',
deceased: false
},
george: {
name: 'George Harrison',
description: 'His guitar gently weeps',
deceased: true
},
ringo: {
name: 'Ringo Starr',
description: 'Going to put him in the movies',
deceased: false
}
}

http.get('app/beatles.json')
.subscribe(
data => { this.beatlesjson = data.json() },
err => console.log(err),
() => console.log(this.beatlesjson)
);




}




}

最佳答案

您可以使用 Elvis 运算符来防止这种行为:

{{ beatlesjson?.paul?.name | json  }

您的问题的原因是通过HTTP请求异步接收数据。所以 beatlesjson 属性在开始时是未定义的。

关于javascript - Angular2 奇怪的硬编码对象与 http.get 对象问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com