我有一个从服务器加载数据的服务,我想在该服务中有一个响应,该响应将被多个组件访问。问题是,我必须等待http响应到达。我知道我可以订阅Observable,但是如果我在所有组件中都订阅了它,它将在每个组件中加载它。 我希望能够等到它加载到任何组件中。
这是我的服务
KalidataService
export class KalidataService {
public response: any = null;
constructor(private http: Http) {
this.getResponse();
}
getResponse() {
const url = 'http://url.com';
const params = new URLSearchParams();
params.append('login', 'login');
params.append('senha', 'pass');
this.http.post(url, params).subscribe(
response => this.response = response.json(),
error => console.log('ERROR')
);
}
}
这是我的组成部分之一:
export class DiarioComponent implements OnInit {
nome_usario: string;
materias: Materia[];
constructor(private kalidataService: KalidataService) {
}
log() {
console.log(this.kalidataService.response);
}
ngOnInit() {
}
}
例如:我有一个功能登录按钮,当我在加载页面后单击鼠标右键时,如果我单击它会记录响应,过一会记录为“ null”。
答案 0 :(得分:0)
您可以使用Subject / BehaviorSubject()实现此目标。
KalidataService
private subjectData = new Subject<any>();
public subjectData$ = this.subjectData.asObservable();
getResponse() {
const url = 'http://url.com';
const params = new URLSearchParams();
params.append('login', 'login');
params.append('senha', 'pass');
this.http.post(url, params).subscribe(
response => {
this.response = response.json();
this.subjectData.next(this.response);
},
error => console.log('ERROR')
);
}
DiarioComponent
ngOninit(){
this.kalidataService.subjectData$.subscribe((response)=>{
console.log(response);
});
}