Angular 从组件调用服务的方法返回未定义的

Angular 从组件调用服务的方法返回未定义的,angular,observable,rxjs5,Angular,Observable,Rxjs5,我在服务文件中有这个服务,它是一个http调用 export class BackendServices { addons: IAddons[]; constructor(private http: HttpClient) { this.getWorkOrders(); } getAddons() { this.http.get<IAddons>(this.BASE_URL + '/addons

我在服务文件中有这个服务,它是一个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 PickaddonsComponent implements OnInit {
    constructor(public bs: BackendServices) {
        this.bs.getAddons();
    }
然后我从对话框的构造函数调用服务上的getAddons方法。 我只是想知道,只有当addons属性接收到来自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 PickaddonsComponent implements OnInit {
    constructor(public bs: BackendServices) {
        this.bs.getAddons();
    }

但是它说.service.getAddons()是未定义的。在stackoverflow上读了很多关于这方面的文章,从不同的帖子中尝试了很多步骤,但到目前为止都没有任何帮助。

似乎初始化的
BackendService
具有未定义的属性
插件。这是真的。因为它仅在调用方法
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;
  });
}


你能分享错误吗sceenshot@ShashankVivek,您好,我已添加屏幕快照您的错误是针对
加载项:IAddons[]
而不是
getAddons()
。如果你的图像是正确的,你能检查一下
addons
是否不是
private
No它只是addons:IAddons[];那么
getAddons()
呢?该错误适用于
插件
,而不是
getAddons()
。你能分享你的代码吗。你的截图与你的问题相矛盾谢谢@Tomislav。这似乎是正确的方向,在组件中,我有一个调用模态对话框的按钮,在模态对话框构造函数中,我调用getAddons方法,当我第一次单击按钮打开对话框时,对话框上没有任何内容,但当我第二次单击它时,它会填充。我们如何解决这个问题。我如何使对话框仅在加载了addons属性的值时才打开。如果您能显示更多的代码,那就太好了。但我建议,也许您可以从对话框构造函数中提取调用
getAddons
的逻辑。从服务器获取数据后,尝试调用对话框。但是请注意,
getAddons
目前没有返回任何内容,也许它应该返回一个
Promise
。这正是我想要的。我如何使它返回一个承诺,不知道如何编码它。根据要求,我用更多的代码更新了帖子。方法
getAddons
只需
返回这个.http.get()
,因为
$http.get()
方法本身返回一个承诺。我会更新上面的答案。
 addons: IAddons[] = [];