角服务返回未定义类型

时间:2019-10-07 16:49:12

标签: angular

我有一个组件,它在加载启动期间加载服务。该服务将返回数据(并通过后端进行验证),但在角度上它将返回未定义。

someComponent.ts

ngOnInit() {
          this.someService.init().subscribe(data => { this.data = data });
}

SomeService.ts

 init() {
          return this.httpclient.post<User>('/loadData', {}).map(data => this.data);
    } // yes, request param is empty {} 

所以问题是  1.如何查找数据设置是否正确?  2.为什么未定义的字段被退回?

我已经通过邮递员测试了后端,当调用/ loadData时,它实际上返回了一些数据。

2 个答案:

答案 0 :(得分:1)

在SomeService.ts中:.map(data => this.data);←可以省略,但这是罪魁祸首。这有效地将返回的结果data交换为实例上设置的字段data的值。如果您确实想返回传入的内容,则应删除关键字this,使其变为.map(data => data);


init() : Observable<User> {
  return this.httpclient.post<User>('/loadData', {});
}

或者如果您想更改响应

init() : Observable<User> {
  return this.httpclient.post<User>('/loadData', {}).pipe(map(data => {
     // alter data here
     return data; // not this.data
   }));
}

最后,您应该在方法上指定返回类型,以便代码可以从类型安全中受益。我已将Observable<User>作为返回类型添加到init方法声明中。

答案 1 :(得分:0)

您需要对服务进行一些修改,

 init() {
    return this.httpclient.post<User>('/loadData', {});
}