Angular 2 Cannot read property 'subscribe' of undefined TypeError: Cannot read property 'subscribe' of undefined
Angular 2 Cannot read property 'subscribe' of undefined TypeError: Cannot read property 'subscribe' of undefined
我已经在 Whosebug 上尝试了很多关于修复此错误的提议,但现在我只需要问一下,因为我已经花了很多时间,现在一无所获。
我有这个简单的服务:
constructor(private http: Http, private tokenResolver: TokenResolver) {}
public getEventHistory(): Observable<heatmapElement[]> {
this.tokenResolver.getToken(true).subscribe(token => {
var headers = new Headers();
headers.append('Authorization', 'Bearer ' + token);
headers.append('Content-Type', 'application/json');
this.result = this.http.get(this.restApi, new RequestOptions({headers: headers}))
.map((res: Response) => res.json());
});
return this.result as Observable<heatmapElement[]>;
}
我想获取数据使用:
public demoData: heatmapElement[] =[];
getEventHistory(): void {
this.eventHistoryService.getEventHistory()
.subscribe(data => this.demoData = data,);
}
这造成了一个我似乎无法修复的错误:
EXCEPTION: Uncaught (in promise): Error: Error in http://localhost:5555/app/dashboard/dashboard.html:13:8 caused by: Cannot read property 'subscribe' of undefined
TypeError: Cannot read property 'subscribe' of undefined
非常感谢您的帮助,
谢谢
您不能 return async call
的结果超出其 subscribe
方法。
如果你想 return 从 getEventHistory()
观察到,你可以将 subscribe
更改为 map
或 switchMap
.
public getEventHistory(): Observable<heatmapElement[]> {
return this.tokenResolver.getToken(true).switchMap(token => {
var headers = new Headers();
headers.append('Authorization', 'Bearer ' + token);
headers.append('Content-Type', 'application/json');
return this.http.get(this.restApi, new RequestOptions({headers: headers}));
})
.map((res: Response) => res.json() as heatmapElement[]);
}
尽管这可能很奇怪,但在我的例子中,在花了很多时间调试之后,结果证明,我使用的是 Output(@Output
) EventEmitter
属性 来处理自定义事件,并且 Angular 在模板上传递时无法识别我的 属性 或自定义事件 属性:
例如
<custom-component (keydownEvent)="someFunctoin()"></custom-component>
执行上述操作的问题是(就我的问题而言)(keydownEvent)
不是有效的事件处理程序,但为什么它在开发中起作用而不是在您构建您的项目。更奇怪的是,ng build --prod
没有发出任何错误或警告!
解决方案
<custom-component keydown="someFunctoin()"></custom-component>
subscriber/subscription相关错误从何而来?
好吧,正如您想象的那样,有人订阅了 EventEmitter
- 所以我想这就是相关性所在
我已经在 Whosebug 上尝试了很多关于修复此错误的提议,但现在我只需要问一下,因为我已经花了很多时间,现在一无所获。
我有这个简单的服务:
constructor(private http: Http, private tokenResolver: TokenResolver) {}
public getEventHistory(): Observable<heatmapElement[]> {
this.tokenResolver.getToken(true).subscribe(token => {
var headers = new Headers();
headers.append('Authorization', 'Bearer ' + token);
headers.append('Content-Type', 'application/json');
this.result = this.http.get(this.restApi, new RequestOptions({headers: headers}))
.map((res: Response) => res.json());
});
return this.result as Observable<heatmapElement[]>;
}
我想获取数据使用:
public demoData: heatmapElement[] =[];
getEventHistory(): void {
this.eventHistoryService.getEventHistory()
.subscribe(data => this.demoData = data,);
}
这造成了一个我似乎无法修复的错误:
EXCEPTION: Uncaught (in promise): Error: Error in http://localhost:5555/app/dashboard/dashboard.html:13:8 caused by: Cannot read property 'subscribe' of undefined TypeError: Cannot read property 'subscribe' of undefined
非常感谢您的帮助, 谢谢
您不能 return async call
的结果超出其 subscribe
方法。
如果你想 return 从 getEventHistory()
观察到,你可以将 subscribe
更改为 map
或 switchMap
.
public getEventHistory(): Observable<heatmapElement[]> {
return this.tokenResolver.getToken(true).switchMap(token => {
var headers = new Headers();
headers.append('Authorization', 'Bearer ' + token);
headers.append('Content-Type', 'application/json');
return this.http.get(this.restApi, new RequestOptions({headers: headers}));
})
.map((res: Response) => res.json() as heatmapElement[]);
}
尽管这可能很奇怪,但在我的例子中,在花了很多时间调试之后,结果证明,我使用的是 Output(@Output
) EventEmitter
属性 来处理自定义事件,并且 Angular 在模板上传递时无法识别我的 属性 或自定义事件 属性:
例如
<custom-component (keydownEvent)="someFunctoin()"></custom-component>
执行上述操作的问题是(就我的问题而言)(keydownEvent)
不是有效的事件处理程序,但为什么它在开发中起作用而不是在您构建您的项目。更奇怪的是,ng build --prod
没有发出任何错误或警告!
解决方案
<custom-component keydown="someFunctoin()"></custom-component>
subscriber/subscription相关错误从何而来?
好吧,正如您想象的那样,有人订阅了 EventEmitter
- 所以我想这就是相关性所在