Это мой код:Угловое 2 подхват на наблюдаемым вызывает ошибку:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import { ICountry } from '../interfaces/country';
@Injectable()
export class RecruiterService {
private _countriesUrl = '/countries.json';
constructor(private http: Http) { }
getCountries(): Observable<ICountry[]> {
return this.http.get(this._countriesUrl)
.map((country: Response) => <ICountry[]> country.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
Весь мой метод getCountries красных линий, но как только я закомментируйте поймать все красные линии идут.
ли я оставляю линию уловов прокомментированной или нет. Тогда в компоненте, где я хочу использовать метод:
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { ICountry } from '../services/interfaces/country';
import { RecruiterService } from '../services/recruiter/recruiter.service';
@Component({
selector: 'agent-details',
templateUrl: 'agent-details.component.html',
providers : [RecruiterService]
})
export class AgentDetailsComponent implements OnInit {
private country: ICountry[] = [];
private errorMessage: string;
constructor(private recruiterService : RecruiterService) {
}
ngOnInit(): void {
this.recruiterService.getCountries()
.subscribe(
country => this.country = <any>country,
error => this.errorMessage = error);
}
}
красных линии на страны => подписывается
Я обнаружил, что если я объявляю свой метод getCountries без Наблюдаемого затем всех красных линии go:
getCountries() {
return this.http.get(this._countriesUrl)
.map((response: Response) => <ICountry[]> response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
Так почему же это невозможно?
Если взять ваш пример: от моего оригинального кода, я просто закомментируйте линию catch и объявите мой метод getCountries общедоступным. Весь этот код находится в файле1.ts. В file2.ts, где я пытаюсь вызвать метод, он красных строк на 'data' в точке, которую я пытаюсь сопоставить с this.countries. – bilpor
Это работает? ... –
нет, потому что это ошибка в файле, который пытается его использовать. Я расширил свой первоначальный вопрос, чтобы показать другой файл, который вызывает вызов. это может иметь больше смысла для вас. – bilpor