Angular 7 - ошибка получения: у rxjs нет экспортируемого члена Observable - PullRequest
0 голосов
/ 17 декабря 2018

Это мой package.json файл:

"dependencies": {
    "@angular/animations": "~7.1.0",
    "@angular/common": "~7.1.0",
    "@angular/compiler": "~7.1.0",
    "@angular/core": "~7.1.0",
    "@angular/forms": "~7.1.0",
    "@angular/material": "^7.1.1",
    "@angular/platform-browser": "~7.1.0",
    "@angular/platform-browser-dynamic": "~7.1.0",
    "@angular/router": "~7.1.0",
    "core-js": "^2.5.4",
    "ng2-opd-popup": "^1.1.21",
    "rxjs": "~6.3.3",
    "tslib": "^1.9.0",
    "zone.js": "~0.8.26"

service.ts код файла, как показано ниже:

import { Injectable } from '@angular/core';
import { Http, Headers} from '@angular/http';
import 'rxjs/add/operator/map';
//import { Observable } from 'rxjs/Observable';
//import   'rxjs/add/observable';
import { Observable} from 'rxjs';
@Injectable({
  providedIn: 'root'
})
export class EmpService {
  employees=[];
  constructor(private _http: Http) { }
  addEmployee(info){
    return this._http.post("http://localhost/data/insert.php",info)
      .map(()=>"");
  }
}

Я получил следующую ошибку:

У rxjs нет экспортируемого члена 'Наблюдаемый'

Есть ли какие-либо проблемы в версиях?

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Ваш код написан в старой угловой версии.необходимы следующие изменения:

1. Use of Http is deprecated
2. importing map & Observable


import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class EmpService {
  employees=[];
  constructor(private _http: HttpClient) { }
  addEmployee(info){
    return this._http.post("http://localhost/data/insert.php",info)
      .pipe(
        map(() => '' )
      )

  }
}

см .:

0 голосов
/ 17 декабря 2018

Думайте, что ваша проблема связана с неправильной посылкой, так как вы делаете это правильно.Правильный способ использования Observable в Angular 7 - это import { Observable } from 'rxjs';

Не уверен, что вы обновились с Angular 6, однако на документах по обновлению :

Переключение из HttpModule и службы Http в HttpClientModule и службу HttpClient.HttpClient упрощает эргономику по умолчанию (вам больше не нужно отображать на json) и теперь поддерживает типизированные возвращаемые значения и перехватчики.Подробнее об angular.io

Удалите устаревшие функции RxJS 6 с помощью правил автоматического обновления rxjs-tslint

Для большинства приложений это будет означать выполнение следующих двух команд:

npm install-g rxjs-tslint rxjs-5-to-6-migrate -p src / tsconfig.app.json

Как только вы и все ваши зависимости обновитесь до RxJS 6, удалите rxjs-compat.

После того, как это будет решено, запустите npm install

Другая возможность кэшируется node_modules, которую можно удалить: git rm -r --cached node_modules У вас может быть несколько Так, один разэто очищено, запустите npm install и у вас должны быть правильные пакеты.

0 голосов
/ 17 декабря 2018

Чтобы соответствовать rxjs6 и angular 7, вы должны заменить:

import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';

на:

import { map } from 'rxjs/operators';
import { HttpClient, HttpHeaders } from '@angular/common/http';

И импортировать Наблюдаемый вот так:

import { Observable } from 'rxjs';

не так:

import { Observable } from 'rxjs/Observable';
// or import   'rxjs/add/observable';

Возможно, вам придется удалить папку node_modules и запустить npm install, потому что кажется, что в ней есть несколько неправильных пакетов.

...