Angular 6从服务中返回值

时间:2018-05-17 15:34:44

标签: angular observable angular5 angular6

我正在学习角度,我从服务中获取数据时遇到问题。这是我的代码 第一个存储数据的简单模型。

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

}

0 个答案:

没有答案