我正在尝试将 JSON
文件导入到我的服务中,但收到此错误
Error: Uncaught (in promise): TypeError: this._qs.getBasicInfo(...).subscribe is not a function(…)
到目前为止,我的 service
文件如下所示
@Injectable()
export class QuestionService {
BasicInfoData: Observable<any>;
constructor(private http: Http){}
getBasicInfo() {
this.BasicInfoData = this.http.get('app/questionnaire/questions.json').map(res =>
res.json()).subscribe(data => this.BasicInfoData = data ) as Observable<any>
return this.BasicInfoData;
}
}
我的组件
看起来像这样
@Component({
moduleId : module.id,
selector : 'questionnaire-page',
templateUrl : './questionnaire.component.html',
providers : [ QuestionService ]
})
export class QuestionnairePage implements OnInit, OnChanges {
BasicInfo: Observable<any>;
constructor(private _qs: QuestionService, private fbuild: FormBuilder) {}
ngOnInit() {
this._qs.getBasicInfo().subscribe( data => this.BasicInfo = data );
console.log(this.BasicInfo);
}
}
在尝试从我的服务调用数据之前,我让它工作得很好,直接将其调用到我的组件
的ngOnInit()
中,如下所示
this.http.get('app/questionnaire/questions.json').subscribe(res => {
this.Questions = res.json()
console.log(this.Questions);
});
我开始尝试使用同样的东西,当我阅读时,我添加了Observable
。我看到另一篇关于 RXJS 的帖子,说他们的问题是在数据到达之前直接订阅数据,他们的解决方法是先使用 .map() ,然后订阅它。它将我的错误从未定义
错误更改为我现在遇到的错误,所以我认为这是朝着正确方向迈出的一步。我一直在来回尝试各种事情,它要么会产生另一个错误,表明它在此之前中断,要么我只是从同一代码片段中得到相同的错误。为什么会发生这种情况?
最佳答案
此代码返回订阅
getBasicInfo() {
this.BasicInfoData = this.http.get('app/questionnaire/questions.json').map(res =>
res.json()).subscribe(data => this.BasicInfo = data ) as Observable<any>
return this.BasicInfoData;
}
}
subscribe
是 Observable
的方法,而不是 Subscription
的方法。
你想要的可能是
getBasicInfo() {
return this.http.get('app/questionnaire/questions.json')
.map(res => res.json());
}
这样就会返回一个可以订阅的Observable
。
关于angular - subscribe 不是尝试在 Angular 2 中使用 JSON 文件时抛出的函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46153100/