找不到模块:错误:无法解析'F:\ Angular \ HttpServices \ http-services \ src \ app'中的'rxjs / add / operator / catch'

时间:2018-05-11 11:40:50

标签: angular rxjs observable

这是我的代码。

import { injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/catch';

@Injectable({
    providedIn: 'root'
})
export class PostsService {
    private url = 'https://jsonplaceholder.typicode.com/posts';
    constructor(private http : Http ) { }
    getPosts {
        return this.http.get(this.url);
    } 

    deletePost(id) {
        return this.http.get(this.url + '/' + id);
    }
}

我在我的电脑上执行此代码它正在工作但不在笔记本电脑上工作。这看起来很有趣,但这是真的 这是我项目的结构

6 个答案:

答案 0 :(得分:11)

新版本的rxjs不再支持单一导入,而是尝试:

import { catchError } from 'rxjs/operators';

答案 1 :(得分:7)

在Angular 6中RXJS导入已被更改,必须将操作符“包装”在pipe()中,并在开头写入不带点(以前是.map,.retry,.catch;现在是:map,retry和catchError)的收获):

import { catchError, map } from 'rxjs/operators';

并使用pipe()

getPosts() {
    // pack in "pipe()"
    return this.http.get(this.url).pipe(
      // eg. "map" without a dot before
      map(data => {
        return data;
      }),
      // "catchError" instead "catch"
      catchError(error => {
        return Observable.throw('Something went wrong ;)');
      })
    );
  }

“我正在正在运行的PC上执行此代码,但无法在笔记本电脑上工作”-在笔记本电脑上,您安装了更新版本的cli cli。它使用新的其他进口生成角度6。问候

答案 2 :(得分:2)

如果您是因为初始代码建议的Udemy课程而来这里的。

进口

import { throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';

这就是现在的样子。

  deletePost(id){
    return this.http.delete(this.url + '/' + id ).pipe(
       catchError(error => {
        if (error.status === 404)
        return throwError(new NotFoundError());
        
        return throwError(new AppError(error));
        
      }));
  }

答案 3 :(得分:1)

在角度7中,这是如何以干净的方式处理http get请求的方法

import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {Observable, throwError} from 'rxjs';
import {catchError, retry} from 'rxjs/operators';

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

  constructor(private _http: HttpClient) {
  }

  public getPosts(): Observable<Post[]> {

    return this._http.get(<URL>).pipe(
      retry(1), catchError(error => {
        return throwError(error.message);
      }));
  }
}

答案 4 :(得分:0)

尝试一下,它将起作用!...

R_Project _Status

答案 5 :(得分:-2)

为什么不尝试添加&#34; import&#39; rxjs / add / operators / catch&#39;;&#34; (把&#39;并使其成为运营商)而不是&#34; import&#39; rxjs / add / operator / catch&#39;;&#34;