Angular2: json не существует для объекта типа - PullRequest
0 голосов
/ 07 мая 2018

Я начинающий. Я не могу решить эту проблему. Я прочитал другие ошибки, но все еще не могу понять.

Когда я делаю .map или .subscribe на сервис, он выдает мне ошибку вроде Свойство 'json' не существует для объекта типа.

Это мой: continents.component.ts

import { Component, OnInit } from '@angular/core';  
import { DataContinentsService } from '../../services/dataContinents.service';
import 'rxjs/add/operator/map';  
@Component({  
selector: 'app-continents',  
templateUrl: './continents.component.html',  
styleUrls: ['./continents.component.css'],  
providers: [DataContinentsService]  
})  
export class ContinentsComponent implements OnInit {  
continent: any;  
constructor(private dataContinentService: DataContinentsService) { }  
public getContinentInfo() {  
this.dataContinentService.getContinentDetail()  
.map((response) => response.json())  
.subscribe(res => this.continent = res.json()[0]);  
}  
ngOnInit() {}  
}  

Это мой сервис: DataContinentsService

import { Injectable } from '@angular/core';  
import {HttpClientModule, HttpClient} from '@angular/common/http';  
// import 'rxjs/add/operator/map';  
@Injectable()  
export class DataContinentsService {  
constructor(private _http: HttpClient) {}  
public getContinentDetail() {  
const _url = 'http://restcountries.eu/rest/v2/name/india?fulltext=true';  
return this._http.get(_url);  
}  
} 

Это мой шаблон: continents.component.html

<h1>Continents</h1>  
<h3>Name: {{continent.name}}</h3>  
<h3>Capital: {{continent.capital}}</h3>  
<h3>Currency: {{continent.currencies[0].code}}</h3>  
<button (click)="getContinentInfo()">get details</button>  

1 Ответ

0 голосов
/ 07 мая 2018

Я предполагаю, что вы читали устаревшую документацию. Старый класс Http, который использовался для возврата ответа с методом json ().

Старый класс Http был удален, и теперь вы правильно используете класс HttpClient. Метод get () HttpClient возвращает Observable любого объекта - он отображает json ответа на объект для вас. Как правило, вы указываете тип объекта, например так:

   this.http.get<SomeObject>(url);

Вместо этого вы просто получаете объект. В любом случае в возвращаемом объекте нет метода json ().

Итак, ваш сервис должен сделать это:

public getContinentDetail(): Observable<Continent[]> {  
  const _url = 'http://restcountries.eu/rest/v2/name/india?fulltext=true';  
  return this._http.get<Continent[]>(_url);  
}

вы должны подписаться что-то вроде этого

this.dataContinentService.getContinentDetail().subscribe(continents: Continent[] => 
  this.continent = continents[0]);  
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...