我在这里有一项服务。它的signIn方法将触发另一个返回Observable的Service的方法。每个组件都应该能够订阅该Observable的结果。所以我创建了一个公共响应变量Observable,可以从每个组件访问它。我不认为我可以直接订阅signIn,因为它需要两个参数,只有一个Observer才能真正知道。
问题是开头的响应未定义。所以你不能在另一个组件的构造函数中订阅它。
那么当我不知道数据何时到达时,如何订阅响应呢?有什么想法吗?
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 :(得分:2)
通常你应该返回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-Observable。