类型“ void”不可分配给类型“ User []”

时间:2018-07-22 19:31:02

标签: angular angular5 angular6

我无法理解此错误, 为什么不允许我将数据发布到用户数组,以便我可以从html访问数据?

这是组件

export class Service1Component implements OnInit {

  selectedUser: User;
  users: Array<User>;

 constructor(private _userService: UserService) { }

 ngOnInit() {
   this._userService.getUsers()
   .subscribe(resUserData => {
     this.users = resUserData
   });
 }

 onSelectUser(user:any){
   this.selectedUser = user;
 }
}

这是我要订阅的服务

export class UserService {

 private _getUrl = '/api/users'

 constructor(private _http: Http) { }

 getUsers(){
   return this._http.get(this._getUrl)
   .map((response: Response) => {
     response.json();
   })
 }
}

enter image description here

5 个答案:

答案 0 :(得分:1)

只需初始化用户

users : User[] = [];

编辑

在编辑完您的问题后,我发现您错过了返回服务的答复

 return this._http.get(this._getUrl)
   .map((response: Response) => {
     return response.json();
 })

答案 1 :(得分:1)

您错过了从函数中返回的功能,该函数在您的组件中被视为void

getUsers(){
   return this._http.get(this._getUrl)
   .map((response: Response) => {
    return response.json();   // add return statement
   })
}

答案 2 :(得分:1)

您的get answers方法不会返回任何内容,因为map函数不会返回。您甚至不需要map函数,因为'new'HttpClient是自动完成的。试试这个

getUsers() { 
  return this._http.get(this._getUrl);
}

答案 3 :(得分:0)

如果箭头函数返回单个值,则无需使用return语句

getUsers(){
   return this._http.get(this._getUrl)
   .map((response: Response) => response.json())
 }
  

如果使用HttpClient,则不需要.map((response: Response) => response.json()),它会在内部自动调用response.json()。

答案 4 :(得分:-3)

您应该将订阅的范围划分为一个块:

.subscribe(resUserData => {
    this.users = resUserData;
});