角2:错误类型'Observable <Object>'。ts上不存在属性'map'(2339)

时间:2020-07-20 20:33:25

标签: json angular error-handling syntax-error

我尝试对函数进行编程,但不知何故弹出了错误: 当我想要.map(res => res.json()); 我在这里做错了什么?我使用最新的Angular版本。

import { Injectable } from '@angular/core';
//import {Http, Headers} from '@angular/http';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import {Contact} from './contact';
import 'rxjs/add/operator/map';

@Injectable({
  providedIn: 'root'
})
export class ContactService {

  constructor(private http: HttpClient) { }

  //retrieving ContactService
  getContacts()
  {
    return this.http.get('http://localhost:3000/api/contacts')
      .map(res => res.json());
  }
  //add contact method
  addContact(newContact) {
    var headers = new HttpHeaders();
    headers.append('Content-Type', 'application/json');
    return this.http.post('http://localhost:3000/api/contact', newContact, {headers:headers})
      .map(res => res.json());
  }

  //delete methods
deleteContact(id)
{
  return this.http.delete('http://localhost:3000/api/contact'+ id)
  .map(res => res.json());
}

}

1 个答案:

答案 0 :(得分:3)

我相信您来自RxJS和HttpClient的旧版本。在最新版本中,您需要进行以下调整。

  1. 如果您使用的是RxJS的较新版本,则应使用map来应用pipe
import 'rxjs/add/operator/map';    // <-- deprecated

import { map } from 'rxjs';        // <-- new

return this.http.delete('http://localhost:3000/api/contact'+ id).pipe(
  map(res => res.json())
);
  1. 在较新版本的Angular中,不需要res.json()。所获取的数据已经是一个JS对象。所以你可以说
return this.http.delete('http://localhost:3000/api/contact'+ id);