Javascript angular2-将json文件内容获取到my class属性中

Javascript angular2-将json文件内容获取到my class属性中,javascript,angularjs,json,typescript,angular,Javascript,Angularjs,Json,Typescript,Angular,这里的新手(第一个angular2天) 我有一个类,它有3个字段:id和name,它们被传递给构造函数,还有第三个字段叫做data,它应该接收JSON文件的内容 export class Hero { id: string; name: string; data: Object; constructor(id: string, name: string) { this.id = id; this.name = name;

这里的新手(第一个angular2天)

我有一个类,它有3个字段:
id
name
,它们被传递给构造函数,还有第三个字段叫做
data
,它应该接收JSON文件的内容

export class Hero {
    id: string;
    name: string;
    data: Object;

    constructor(id: string, name: string) {
        this.id = id;
        this.name = name;

        //retrieve JSON and assign it to this.data
        var request = new XMLHttpRequest();
        request.onload = function(){
            var result = JSON.parse(this.responseText);
            this.data = result;
        };

        //get the json file according to the object id
        request.open("get", id+".json", true);
        request.send();

    }
}
然后我像这样实例化对象

new Hero("hero1", "Hero 1");
问题是指令
this.data=result不起作用,因为
引用的是请求对象,而不是类


另外,我不知道这是否是正确的方法(以及获取json文件)。我对安格拉尔语还是很迷茫。谢谢

改用箭头功能

    request.onload = () => {
        var result = JSON.parse(this.responseText);
        this.data = result;
    };

您还可以执行以下操作:

export class Hero {
    id: string;
    name: string;
    data: Object;

    constructor(id: string, name: string) {
        this.id = id;
        this.name = name;

        let request = new XMLHttpRequest();
        request.onload = this.onDataRecieved.bind(this, request);

        request.open("get", id + ".json", true);
        request.send();
    }

    private onDataRecieved(request: XMLHttpRequest): void {
        let result = JSON.parse(request.responseText);
        this.data = JSON.parse(result);
    }
}

你为什么不使用
http.get()
(不能解决你的实际问题)?@GünterZöchbauer我看到了一些
http.get()
的例子,其中
http
对象是一个构造函数参数,而实际上我没有得到它。如果我添加它,那么实例
newhero(“hero1”,“hero1”)
将不再有效(缺少1个参数)
Http
是在添加
Http\U提供程序时提供的(在
bootstrap()
AppComponent的提供程序:[…]
。当通过Angular创建组件时,它传递一个
Http
实例(服务)您可以使用它来发出请求。另请参见@GünterZöchbauer谢谢,我将尝试此给我错误
属性'responseText'在类型'Hero'上不存在。
它应该来自何处。我看不到您的代码中声明或分配的
responseText
。我猜您的意思是
请求。responseText