Angular - вызов метода для сервиса из компонента возвращает неопределенное значение - PullRequest
0 голосов
/ 13 мая 2018

У меня есть этот сервис в файле сервисов, который является http-вызовом.

    export class BackendServices {
      addons: IAddons[];   
      constructor(private http: HttpClient) { 
        this.getWorkOrders();
      }
     getAddons() {
      this.http.get<IAddons>(this.BASE_URL + '/addons/')
      .subscribe((data: any) => {
          this.addons = data;
      });
    }

КОМПОНЕНТНАЯ ЧАСТЬ Затем из моего основного компонента у меня есть кнопка, которая вызывает модальное диалоговое окно.Вот код основного компонента:

export class OrdersComponent { 
openAddonsDialog() {
    let dialogRef = this.pickAddonsDialog.open(PickaddonsComponent);
  }
}

И затем я вызываю метод getAddons, который находится на службе из конструктора диалога.Мне просто интересно, как мы можем сделать модальное диалоговое окно открытым только тогда, когда свойство addons получило данные от вызова http.

export class PickaddonsComponent implements OnInit {
    constructor(public bs: BackendServices) {
        this.bs.getAddons();
    }

Но там говорится, что this.service.getAddons () не определено.Об этом много читали в stackoverflow, пробовал немало шагов из разных постов, но пока что ни один из них мне не помог.

1 Ответ

0 голосов
/ 13 мая 2018

Кажется, что инициализированный BackendService имеет атрибут addons undefined. Что является правдой. Потому что он устанавливается только при вызове метода getAddons.

Попробуйте это:

export class BackendServices {
  addons: IAddons[] = [];   
  constructor(private http: HttpClient) { 
    this.getWorkOrders();
  }
 getAddons() {
  return this.http.get<IAddons>(this.BASE_URL + '/addons/')
  .subscribe((data: any) => {
      this.addons = data;
  });
}

Замена

 addons: IAddons[];

с

 addons: IAddons[] = [];   
...