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

标签 javascript json typescript angular

我有相同的 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/

相关文章:

json - 无法获取 Amazon S3 文件的内容并使用 python 和 boto3 编辑该文件

jquery - 如何从json对象中提取字符串键和值

css - 单击时如何更改 Angular Material 侧导航汉堡菜单?

reactjs - 使用 Typescript 验证条件 Prop 对

javascript - 在 ember-cli 中使用 ID 路由

javascript - 我可以使用 HTML5 和 javascript 将音频流式传输到服务器吗

java - 使用 Gson 添加现有的 json 字符串

typescript ,限制第二个参数依赖于第一个参数类型

带 jquery 循环的 JavaScript

javascript - AJAX 完成对象字面量后执行函数