Http得到响应没有在订阅中填充

时间:2018-03-31 02:13:36

标签: angular

在使用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没有发生上述错误。

有人可以帮我实现吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

首先将API调用为async,即使用Observable。

  • 导入observable rxjx

  • userDetail(username):observable {}

Angular Http请求支持默认JSON作为响应,因此您可以删除map函数

现在在视图组件中写,

  • {{bioData | json}}

我有更新示例看看,

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)=> {