angular2 typescript无法分配给this.object属性

时间:2017-03-05 13:23:04

标签: angular typescript

我正在尝试使用angular2和typescript的项目,我遇到了一些莫名其妙的问题。出于某种原因,我无法将数据分配给类属性。

我有一对像这样定义的类属性:

public loadResultMessages: string[];
public book: Book;

我有一种方法,我可以调用这样的服务:

getBookByCode() {

    this.http.get('/api/book/loadbycode?code=' + this.bookCode)
        .subscribe(result => {

            var object = result.json();

            console.log(object);

            this.loadResultMessages = object.loadResultMessages;
            this.book = object.book;

    });
}

我已经验证我在对象中获取数据,但即使在尝试将数据分配给这两个属性之后,他们也会说未定义。怎么会这样?

编辑:好的,我正在搞乱Visual Studio 2017并在我的JavaScript中设置断点。我对变量进行了调整,它告诉我它们是未定义的。但是,当我实际将它们注销到控制台时,它们会被填充。我可以将鼠标悬停在其他变量上,并显示结果。我不确定这是某种时间问题还是VS中的错误?

我想我也遇到了一些重大的缓存问题。只是将额外的console.log()调用放在那里突然使我的代码开始工作。

1 个答案:

答案 0 :(得分:0)

大多数情况下,您的服务应该返回对象或对象数组的Observable。

getBookByCode(bookCode) : Observable<any[]> {

    return this.http.get('/api/book/loadbycode?code=' + bookCode)
                    .map((response: Response) => <any[]>response.json())
                    .do(data => console.log("data we got is " + JSON.stringify(data)))
                    .catch(this.handleError);
    });
}

在您的组件中,您应该在构造函数中订阅它

constructor(private serviceObject:ServiceName){
    this.serviceObject.getBookByCode(this.bookCode)
                    .subscribe(results => this.results = results,
                    error =>console.log(error);
    }   
}