Angular 6中get请求调用时subscribe报错及类型不匹配问题求助
解决Angular 6中subscribe不存在和类型不匹配的问题
我来帮你一步步搞定这两个报错:
第一个错误:subscribe does not exist on type void
这个问题的核心很简单——你的服务方法getUsers()根本没返回任何值(默认返回void),但你在组件里却想调用它的subscribe方法,可只有Observable类型才有这个方法呀!
看你原来的服务代码,this._http.get(...).pipe(...)其实是一个Observable,但你没把它return出去,导致方法默认返回void,自然找不到subscribe。
另外补充个Angular 6的小知识点:它默认用HttpClient替代了旧的Http,HttpClient的get方法会自动帮你解析JSON响应,所以你完全不用手动写response.json()这一步啦。
修改后的服务代码应该是这样的(记得提前导入Observable和你的User类型):
import { Observable } from 'rxjs'; // 导入你的User类型,比如 import { User } from './user.model'; getUsers(): Observable<User[]> { // 直接return HttpClient的请求,同时指定响应类型为User[] return this._http.get<User[]>(this.baseUrl + "/users", this.options); }
如果你还在坚持用旧的Http模块(不太推荐),那得保留map操作,但同样要记得return:
getUsers(): Observable<User[]> { return this._http.get(this.baseUrl + "/users", this.options) .pipe(map((response: Response) => response.json() as User[])); }
第二个错误:void is not assignable to User[]
这个报错是因为你之前的服务方法返回void,但组件期望它返回一个能订阅的Observable<User[]>。只要按照上面的方法修改服务代码,让它正确返回Observable<User[]>,这个错误就会自动消失。
你的组件代码本身是没问题的,修改服务后就能正常运行:
private users: User[]; getUsers() { this._userService.getUsers().subscribe((users) => { console.log(users); this.users = users; }); }
内容的提问来源于stack exchange,提问作者user9729328
相关产品推荐
相关产品推荐

