我正在尝试使用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()调用放在那里突然使我的代码开始工作。
答案 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);
}
}