2017-01-04 4 views
1

Это мой код:Угловое 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); 
} 

Так почему же это невозможно?

ответ

0

что, если вы пытаетесь WTH что-то вроде этого:

public GetAll =(): Observable<ICountry[]> => { 
     return this._http.get(this.actionUrl).map((response: Response) => <ICountry[]>response.json()); 
    } 



    public countries: ICountry[]=[] 

    this._dataService 
      .GetAll() 
      .subscribe(data => this.countries = data, 
      error => (response) => { 
       //this._toasterService.pop('error', 'Damn', 'Something went wrong...'); 
      }, 
      () => { 
       //this._toasterService.pop('success', 'Complete', 'Getting all countries complete'); 

      }); 

надеюсь, что это помогает

+0

Если взять ваш пример: от моего оригинального кода, я просто закомментируйте линию catch и объявите мой метод getCountries общедоступным. Весь этот код находится в файле1.ts. В file2.ts, где я пытаюсь вызвать метод, он красных строк на 'data' в точке, которую я пытаюсь сопоставить с this.countries. – bilpor

+0

Это работает? ... –

+0

нет, потому что это ошибка в файле, который пытается его использовать. Я расширил свой первоначальный вопрос, чтобы показать другой файл, который вызывает вызов. это может иметь больше смысла для вас. – bilpor

0

Попробуйте сделать это, как этот

.catch(err => this.handleError(err)); 
+0

все еще красные линии :( – bilpor

Смежные вопросы