Angular 6 возвращаемое значение из сервиса - PullRequest
0 голосов
/ 17 мая 2018

Я учусь на английском, и у меня проблема с получением данных из сервиса. Это мой код Первая простая модель для хранения данных.

//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);
});

}

...