我搜索了以前的线程询问此错误消息。据我所知,此错误消息有两个记录在案的原因。

  • 缺少 import 'rxjs/add/operator/toPromise'import 'import 'rxjs/add/operator/map'
  • Visual Studio 错误(我没有使用)。

  • 这是有问题的代码
    import { Injectable } from '@angular/core';
    import { Headers, Http } from '@angular/http';
    
    import {Observable} from 'rxjs/Rx';
    import 'rxjs/add/operator/toPromise';
    import 'rxjs/add/operator/map';
    
    import { Event } from './event';
    
    @Injectable()
    export class EventService {
    
      private eventsUrl = 'api/events'; // URL to web api
      private headers = new Headers({'Content-Type': 'application/json'});
    
      constructor(private http: Http) { }
    
      getEvents(): Promise<Event[]> {
        return this.http.get(this.eventsUrl)
                   .toPromise()
                   .then(response => response.json().data as Event[])
                   .catch(this.handleError);
      }
    }
    

    上面的代码给了我错误 Property 'toPromise' does not exist on type 'Observable<Response>'
    编辑:感谢@estus,我发现我错误地安装了其中一个软件包。该包有自己的 node_modules,它也有 rxjs,导致项目内有重复的 rxjs。

    最佳答案

    您可能希望按照更新的文档使用新的 HttpClient:https://angular.io/guide/http(尽管它们在服务中没有代码)。

    服务

    服务中的代码将如下所示:

    import { Injectable } from '@angular/core';
    import { HttpClient} from '@angular/common/http';
    
    import { Observable } from 'rxjs/Observable';
    
    import { IMovie } from './movie';
    
    @Injectable()
    export class MovieService {
        private moviesUrl = './api/movies/movies.json';
    
        constructor(private http: HttpClient) { }
    
        getMovies(): Observable<IMovie[]> {
            return this.http.get<IMovie[]>(this.moviesUrl);
        }
    }
    

    组件

    调用此方法的组件代码如下所示:
    ngOnInit(): void {
        this.movieService.getMovies()
            .subscribe((movies: IMovie[]) => this.movies = movies);
    }
    

    关于angular - 属性 'toPromise' 在类型 'Observable<Response> 上不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46613716/

    10-10 07:40