Angular 从组件调用服务的方法返回未定义的
我在服务文件中有这个服务,它是一个http调用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
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[] = [];