首页 > 解决方案 > Angular 6从服务返回值

问题描述

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

//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(login: string, password: string) {
const data = {'login': login, 'password': password};
return this.http.post(`login/`, data)
  .map(token => {
    this.user = new UserModel().deserialize(token);
});

}

标签: angularobservableangular5angular6

解决方案


推荐阅读