Map не является функцией (Rxjs), хотя импорт
было много вопросов о том, что "карта не является функцией", но почти
все просто не импортировали библиотеку rxjs.
В моем случае, я делаю импорт, но ошибка все еще существует.
Я работаю с Ionic 2, и вот как выглядят мои зависимости package.json:
"dependencies": {
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/compiler-cli": "0.6.2",
"@angular/core": "2.0.0",
"@angular/forms": "2.0.0",
"@angular/http": "2.0.0",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/platform-server": "2.0.0",
"@ionic/storage": "1.0.3",
"ionic-angular": "2.0.0-rc.1",
"ionic-native": "2.2.3",
"ionicons": "3.0.0",
"rxjs": "5.0.0-beta.12"
}
Так вот как я создаю свою службу:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';
@Injectable()
export class LoginService {
constructor(private http: Http) {
}
private dataUrl = '/node';
getData() : any {
this.http.get(this.dataUrl)
.map(response => response.json())
.subscribe(result => console.log(result));
}
}
Я также попытался переустановить модуль rxjs, но все равно не успел.
Может быть, это несовместимо с ионной 2 или текущей версией angular?
Что думают ребята?
Приветствия,
Андрей
Ответы
Ответ 1
Это 2018. У меня была эта же проблема. Это то, что сработало для меня:
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
this.http.get(url)
.pipe(map(r => r.json()))
.subscribe(resp => {
resp = resp.json();
console.log(resp);
});
Ответ 2
У меня была та же проблема.
Я использую jspm с system.js. Для меня, когда я модернизировал свою систему, используя jspm update
angular2 -http required [email protected]
, но [email protected]
требуется [email protected]
, который затем отображается на "rxjs". Полагаю, это была самая новая версия? Я обнаружил все это, проверив файл config.js
, созданный jspm.
Так что, видимо, когда я использовал выражение...
import 'rxjs/add/operator/map';
... он добавлял карту к версии rxjs 5.0.0-beta.12
, которая не версия, используемая http. Я должен был изменить линию, чтобы...
import 'npm:[email protected]/add/operator/map';
... и затем он сработал.
Ответ 3
создать файл rxjs-operator.ts
// Statics
import 'rxjs/add/observable/throw';
// Operators
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/toPromise';
и назовите его, если необходимо.
import './rxjs-operators';
Ответ 4
попробуйте
import {Observable} from 'rxjs/Observable';
getData() : Observable<any> {
this.http.get(this.dataUrl)
.map(response => response.json())
.subscribe(result => console.log(result));
}
Ответ 5
попробовать
import {Injectable} из '@angular/core';
import {Http, Response, Headers, URLSearchParams, RequestOptions} из '@angular/http';
import {Observable} из 'rxjs/Observable';
import 'rxjs/Rx';
Ответ 6
Пожалуйста, импортируйте карту следующим образом:
import { map } from 'rxjs/operators';
вместо 'rxjs/add/operator/map'
Ответ 7
импорт импорта 'rxjs/Rx'; имеет некоторые проблемы с версией 5.5.2, так как для каждого импорта я могу перейти из импорта {Observable} из 'rxjs/Rx' для импорта {Observable} из 'rxjs/Observable';