Угловой 4 это.http.получить(…).карта-это не функция.
Привет у меня проблема с моим кодом.
import { Injectable } from '@angular/core';
import { Car } from "./models/car";
import { Observable } from "rxjs/Observable";
import { Http } from "@angular/http";
import 'rxjs'
@Injectable()
export class CarsService {
private apiUrl = "http://localhost:3000/api/cars";
constructor(private http : Http) { }
getCars() : Observable<Car[]> {
return this.http.get(this.apiUrl)
.map((res) => res.json())
}
}
С этим кодом у меня Ошибка:
Это.http.получить(...).карта - это не функция
Но когда я добавлю:
import 'rxjs/add/operator/map'
Все еще есть проблема, но ошибка:
Не удается прочитать свойство 'map' из undefined
Вы можете мне помочь? Спасибо
4 ответа:
Как упоминалось другими
Http
является устаревшим, используйтеHttpClient
вместо этого.HttpClient
анализирует ваш ответ на объект, поэтому вы удаляете отображение ответа. Кроме того, чтобы избежать ошибки проверки типов, скажите Angular, какой реакции вы ожидаете.Поэтому импортируйте
HttpClientModule
и добавьте его в массив imports, послеBrowserModule
. В сервисе importHttpClient
введите его в конструктор и используйте следующим образом:import { Injectable } from '@angular/core'; import { Car } from "./models/car"; import { Observable } from "rxjs/Observable"; import { HttpClient } from "@angular/common/http"; import 'rxjs' @Injectable() export class CarsService { private apiUrl = "http://localhost:3000/api/cars"; constructor(private httpClient : HttpClient) { } getCars() : Observable<Car[]> { // tell Angular you are expecting an array of 'Car' return this.httpClient.get<Car[]>(this.apiUrl) } }
С angular5
HttpClient
реализация уже включает в себя внутреннее использование map.so это работает для вас автоматически.Просто обновите его как
getCars() : Observable<Car[]> { return this.http.get(this.apiUrl) }
Также убедитесь, что вы используете
HttpClient
вместо того, чтобыHttp
.Вы можете прочитать об этом подробнее
here
Отредактируйте свой код
import { Injectable } from '@angular/core'; import { Car } from "./models/car"; import { Observable } from "rxjs/Observable"; import { Http } from "@angular/http"; @Injectable() export class CarsService { private apiUrl = "http://localhost:3000/api/cars"; constructor(private http : Http) { } getCars() : Observable<Car[]> { return this.http.get(this.apiUrl) } }
Так как он автоматически анализирует ответ как JSON. Вам не нужно явно анализировать его.
ngOnInit() { this.loadCars(); } loadCars() : void { this.carsService.getCars().subscribe((cars) => { this.cars = cars; this.countTotalCost(); }) }
Поэтому я перемещаю это
this.countTotalCost();
От
ngOnInit
доloadCars
И сейчас .карту свою "ОК".
У меня есть только эта ошибка: выражение изменилось после того, как оно было проверено. Предыдущее значение: "undefined". Текущее значение: "NaN".
<div class="row" *ngIf="grossCost"> //this line error/error context <div class="col-sm-12"> <div class="total-cost"> <p class="text-right">TOTAL GROSS COST: {{ grossCost}} PLN</p> </div> </div> </div>