等待角度响应以在多个组件中使用负载之前

时间:2018-10-02 12:43:12

标签: angular angular6

我有一个从服务器加载数据的服务,我想在该服务中有一个响应,该响应将被多个组件访问。问题是,我必须等待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”。

1 个答案:

答案 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);
   });
}