在使用http调用的angular5中,进行了一项服务,
app.service.ts
userDetail(userName) {
return this.http
.get(this.bioUrl + userName)
.map(res => res.json());
}
detail.component.ts
this.appService.search(this.searchTerm$)
.subscribe(results => {
this.results = results.results;
this.result = results.items[0];
console.log(results);
console.log(this.result);
console.log(this.result.owner.login) // Getting error
this.appService.userDetail(this.result.owner.login) //Getting error
.subscribe(bioData => {
this.bioData = bioData;
console.log(bioData);
})
this.appService.repoSearch(this.result.owner.login)
.subscribe(repos => {
this.repos = repos;
console.log(repos);
})
});
错误TS2339:财产'所有者'类型'对象'
上不存在有时编译很好,但在执行时调用控制台错误正在发生。 Angular Build没有发生上述错误。
有人可以帮我实现吗?
谢谢,
答案 0 :(得分:0)
首先将API调用为async,即使用Observable。
导入observable rxjx
userDetail(username):observable {}
Angular Http请求支持默认JSON作为响应,因此您可以删除map函数
现在在视图组件中写,
我有更新示例看看,
app.apiService.ts
unexpected character after line continuation character
(<string>,line 22)
app.component.ts
userDetail(userName): Observable<any>{
const url = `${this.url}/user/login`+userName;
return this.http.get(url, { headers: "If require" })
}
app.component.html
验证您是否收到了打印API行响应
{{bioData | JSON}}
如果是数组的响应,那么你已经写了
{{user.name}}
{{user.age}}
method(){ this.appService.userDetail(this.result.owner.login) //Getting error .subscribe(bioData => { /* for testing purpose, we will create our own response */ /* array response */ bioData = [{ "name": "User Name", "age": "23" }] /* object response */ bioData = { "name": "User Name", "age": "23" } this.bioData = bioData; }, error => { console.log("Error occur while api call") }) }
答案 1 :(得分:0)
由于您使用的是map(res => res.json())
,我假设您使用旧的,已弃用的Http
类而不是新的HttpClient
(如果您正在启动新项目,则应该切换)< / p>
出现此问题是因为res.json()
返回的类型是object,它不包含任何属性。
您需要显式声明userDetails方法的返回类型
userDetail(userName) : Observable<any> { //Just to make it clear
return this.http
.get(this.bioUrl + userName)
.map(res => res.json() as any); //<== as any
}
您还可以在订阅方法中声明检索数据的类型
this.appService.search(this.searchTerm$)
.subscribe((results : any)=> {