Angular 如何将响应从服务传递到组件?

Angular 如何将响应从服务传递到组件?,angular,Angular,我有以下服务: Login (body): Observable<Login[]> { //let bodyString = JSON.stringify(body); // Stringify payload var bodyString = 'email='+body.email +'&password='+body.password; let headers = new Headers({ 'Content-Type'

我有以下服务:

Login (body): Observable<Login[]> {

        //let bodyString = JSON.stringify(body); // Stringify payload
        var bodyString = 'email='+body.email +'&password='+body.password;

        let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded'});

        let options = new RequestOptions({ headers: headers }); // Create a request option

        return this.http.post('/logiranje', bodyString, options) // ...using post request
                         .map(response => {return response}) // ...and calling .json() on the response to return data
                         .catch((error:any) => Observable.throw(error.json().error || 'Server error' )); //...errors if any
    }
但我不知道如何将价值从服务传递到组件?
有什么建议吗?

似乎您希望您的响应是JSON。然后,应将其映射为以下内容:

return this.http.post('/logiranje', bodyString, options)
  .map(response => { response.json() }) 
  .catch((error:any) => Observable.throw(error.json().error || 'Server error' )); 
由于您已经在组件中注入了服务,您只需将响应分配给一个变量:

data : any;

constructor(private loginService : LoginService) {}

myFunction(body){
    this.loginService.Login(body).subscribe(
      res => { this.data = res },
      err => { console.log(err) }
    );
}
然后可以使用数据变量


使用代码时,console.logresponse显示什么?您是否像我在第一行中那样定义了一个数据变量?成功响应响应,状态为:200,URL:login.component.js:38:68订阅已完成,因此您的响应不是JSON,因此此.data.isLoggedIn将未定义。我编辑代码,以便您的响应将正确映射到JSON
return this.http.post('/logiranje', bodyString, options)
  .map(response => { response.json() }) 
  .catch((error:any) => Observable.throw(error.json().error || 'Server error' )); 
data : any;

constructor(private loginService : LoginService) {}

myFunction(body){
    this.loginService.Login(body).subscribe(
      res => { this.data = res },
      err => { console.log(err) }
    );
}
if(this.data.isLoggedIn){
  current.router.navigate(['/home']);
}