typescript - subscribe är inte en funktion fel kastas när man försöker använda JSON-fil i Angular 2
Jag försöker importera en JSON-fil till min tjänst och får detta fel
Fel: Okänt (i löfte): TypeError: this._qs.getBasicInfo(...).subscribe är inte en funktion(…)
Just nu ser min service-fil ut så här
@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;
}
}
och min component ser ut så här
@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);
}
}
innan jag försökte anropa datan från min tjänst fungerade det helt perfekt att anropa den direkt i ngOnInit() i min component på detta sätt
this.http.get('app/questionnaire/questions.json').subscribe(res => {
this.Questions = res.json()
console.log(this.Questions);
});
Jag började med att försöka använda samma sak och när jag läste lade jag till Observable. Jag stötte på ett annat inlägg om RXJS där det stod att deras problem var att de prenumererade direkt på datan innan den fanns, och deras lösning var att använda .map() först och sedan prenumerera på det. Det ändrade mitt fel från ett undefined-fel till det jag får nu, så jag tänkte att det var ett steg i rätt riktning. Jag har gått fram och tillbaka och testat alla möjliga saker och det skapar antingen ett annat fel som visar att det bryts innan den här punkten eller så får jag bara samma fel från samma kodsnutt. Varför händer detta?
Svar #1
Denna kod returnerar en Subscription
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 är en metod av Observable, inte av Subscription. Det du förmodligen vill ha är
getBasicInfo() {
return this.http.get('app/questionnaire/questions.json')
.map(res => res.json());
}
på detta sätt returneras en Observable som man kan prenumerera på.
