我正在学习角度,我从服务中获取数据时遇到问题。这是我的代码 第一个存储数据的简单模型。
//user.model.ts
export class UserModel {
first_name: string;
last_name: string;
deserialize(input: any): this {
Object.assign(this, input);
return this;
}
}
验证服务。 我需要将数据保存到UserModel以从所有代码获取此数据。
//auth.service.ts
export class AuthService implements OnDestroy {
private user: UserModel;
constructor(private http: HttpClient) {}
getUser() Observable<UserModel> {
return Observable.of(this.user);
}
login(login: string, password: string) {
const data = {'login': login, 'password': password};
return this.http.post(`login/`, data)
.map(token => {
this.user = new UserModel().deserialize(token);
});
}
}
//login.component.ts
// ......
this.authService.login(username, password).subscribe(
data => {
this.router.navigate(['/home']);
},
);
登录后和主页
//home.component.ts
export class HomeComponent implements OnInit {
user: any;
constructor(private authService: AuthService) { }
ngOnInit() {
this.authService.getUser().subscribe(data =>{
this.user = data;
console.log(this.user);
});
}
}
我得到了:
TypeError: Cannot read property 'subscribe' of undefined
如何更正从服务中获取保存的数据?
修改 我发现了一个错误
getUser() Observable<UserModel> {
return Observable.of(this.user);
}
// should be
getUser(): Observable<UserModel> {
return Observable.of(this.user);
}
但是现在我的控制台输出中没有定义(来自HomeComponent)
编辑2
看起来在login方法中的map中的用户初始化并没有初始化我的变量。有谁知道为什么?
login(login: string, password: string) {
const data = {'login': login, 'password': password};
return this.http.post(`login/`, data)
.map(token => {
this.user = new UserModel().deserialize(token);
});
}