Angular 2观察结果http

Angular 2观察结果http

问题描述:

在这里我有一个服务。其signIn方法将激发另一个Service的方法,该方法返回一个Observable。每个组件都应该能够订阅该Observable的结果。所以我创建了一个公共响应变量Observable,它可以从每个组件中访问。我不认为我可以直接订阅signIn,因为它需要两个参数,只有一个观察者会真正知道。Angular 2观察结果http

问题是,响应是undefined在开头。所以你不能在另一个组件的构造函数中订阅它。

那么我怎么能订阅响应,当我不知道数据何时到达?有任何想法吗?

export class AuthService{ 

    public response:Observable<any[]>; 

    constructor(private httpService:HTTPService){ 
     this.response = new Observable(); 
    } 

    signIn(user:String, password:String){ 

     this.response = this.httpService.query({user: user, pass: password}) 
     .map((r: Response) => r.json()); 

    } 
} 

这是AuthComponent方法,其中用户名和密码都来自

onSubmit(f:NgForm){ 
    this.authService.signIn(f.value.user, f.value.password); 
} 
+0

”。什么数据? 'user'和'password'从哪里来? –

+0

@Günter用户和密码来自组件。数据来自http get。 –

通常你应该只返回Observable

import { BehaviorSubject } from 'rxjs'; 

export class AuthService { 

    public data = new BehaviorSubject<any[]>([]); 

    constructor(private httpService: HTTPService) { } 

    signIn(user:String, password:String): Observable<any[]> { 

     return this.httpService.query({user: user, pass: password}) 
      .map((r: Response) => r.json()) 
      .map(data => { this.data.next(data); return data; }); // OPTIONAL if you want to store data in you service.. 

    } 
} 

其他组件现在可以订阅data主题。

调用组件将订阅和完成。

Http-Request-Observables在每个请求后完成。 “数据何时到达”的“

” “
+0

如果我直接订阅signIn,我需要传递用户名和密码。并且每次都会触发http获取。 –

+0

看到我更新的答案,所有其他组件现在可以订阅'data'主题,并且如果有任何其他组件登录,它们将被通知.. – mxii

+0

谢谢。很有用! –