Я учусь на английском, и у меня проблема с получением данных из сервиса. Это мой код
Первая простая модель для хранения данных.
//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
Как исправить получение сохраненных данных из сервиса?
EDIT
Я нашел ошибку
getUser() Observable<UserModel> {
return Observable.of(this.user);
}
// should be
getUser(): Observable<UserModel> {
return Observable.of(this.user);
}
Но теперь я не определил в выводе моей консоли (из HomeComponent)
РЕДАКТИРОВАТЬ 2
Похоже, что инициализация пользователя внутри карты в методе входа не инициализировала мою переменную. Кто-нибудь знает почему?
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);
});
}