Общий сервис для нескольких модулей - PullRequest
0 голосов
/ 04 января 2019

Может кто-нибудь помочь мне решить эту проблему? У меня есть служба, которая имеет несколько методов, каждый из которых выполняет какую-то задачу после получения ответа от сервера, а затем я должен передать измененный ответ соответствующему компоненту вызывающей стороны. это код, который я имею в службе.

 getData(observer){
          // prepare request Object
         this.httpService.getDropdownData(reqObj).subscribe(
                (data) => {

                 // modify response and then pass it to the respective component.
                  //I can't think of any solution from here. tried adding 
                   observable  but  not getting the desired output(scoping issue)


                 observer.next(data);
                 observer.complete();  
                }, (error) => {
                   // error case
            });
      }

    public observeData = new Observable(getData);


    // component code.

    this.cmpService.observeData().subscribe( response){
        do something with the response.
    };

expecting a modified output in each component.

Ответы [ 2 ]

0 голосов
/ 06 января 2019

это то, что я пытался и смог достичь своей цели, но не уверен, какое влияние это оказывает на производительность и является ли это правильным способом использования наблюдаемых?

      getCmpData(): Observable<any>{

        this.spinner.show();
        let userGroups = []
        if(userData != null){
          userData = JSON.parse(userData);
            if(userData.user && userData.user.userGroups && 
                userData.user.userGroups.length){
                userGroups = userData.user.userGroups;
            }
        }
        return Observable.create(observer => {
          this.httpService.getData('cmpInfo/', userGroups)
              //.map(res => res.json())getting ts error so commented out
              .subscribe((data) => {
                if (data[0].status != 'ERROR') {
                  observer.next(data[0].results);// each component has different logic to use this data.
                  observer.complete();
                }else{
                  this.spinner.hide();
                  this.modalService.showErrorMessage();
                  observer.unsubscribe();
                }

            }, (error) => {
                this.spinner.hide();
                this.modalService.showErrorMessage();
                observer.unsubscribe();
              });
       });
  }
}

// код компонента.

this.cmpService.getCmpData().subscribe(
        (data) => {
            // further logic
    });
0 голосов
/ 04 января 2019

Это должно быть что-то вроде:

обслуживание:

getData(): Observable<any> {
  return this.httpService.getDropdownData(reqObj).pipe(
    // do your stuffs here with the help of rxjs operators
  );
}

компонент:

this.cmpService.getData().subscribe(
  data => console.log(data), // here you'll get modified datas
  err => console.log(err),   // here, you'll manage errors in your component
  () => {}
);

Надеюсь, это поможет; -)

...