map虽然是import,但不是函数(Rxjs)

时间:2016-10-30 11:40:53

标签: angular ionic2 rxjs

有很多关于&#34的问题;地图不是一个功能",但差不多 每个人都没有导入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或当前的角度版本不兼容?

你认为你们有什么想法?

干杯,

的Andrej

8 个答案:

答案 0 :(得分:10)

我遇到了同样的问题。

我正在使用带有system.js的jspm。对我来说,当我使用jspm update angular2-http需要rxjs@5.0.0-beta.12升级我的系统时,angular2-dynamic-component@0.0.50需要rxjs@5.0.0-rc.2,这就是" rxjs"映射到。我想因为它是最新版本?我通过检查由jspm创建的config.js文件来发现所有这些。

显然当我使用声明时......

import 'rxjs/add/operator/map';

...它正在将地图添加到rxjs版本5.0.0-beta.12,这是 http正在使用的版本。我不得不将线路改为......

import 'npm:rxjs@5.0.0-beta.12/add/operator/map'; 

......然后它奏效了。

答案 1 :(得分:5)

这是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 :(得分:2)

创建文件rxjs-operators.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';

答案 3 :(得分:1)

尝试

    import {Observable} from 'rxjs/Observable';

getData() : Observable<any> {
        this.http.get(this.dataUrl)
            .map(response => response.json())
            .subscribe(result => console.log(result));
    }

答案 4 :(得分:1)

请按如下所示导入地图

import { map } from 'rxjs/operators'; 

代替“ rxjs / add / operator / map”

答案 5 :(得分:0)

从@ angular / core&#39;导入{Injectable}; 从&#39; @ angular / http&#39;中导入{Http,Response,Headers,URLSearchParams,RequestOptions}; 从&#39; rxjs / Observable&#39;中导入{Observable}; import&#; rxjs / Rx&#39;;

答案 6 :(得分:0)

您需要导入地图操作符:

import 'rxjs/add/operator/map'

如果这不起作用,请尝试

import 'rxjs/Rx';

请注意,对于 RxJS 6.x.x 及更高版本,您必须使用可管道操作符,如下所示:

import { map } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Observable } from 'rxjs';
        
@Injectable()
        export class LoginService {
            constructor(private http: Http) {}
        
            private dataUrl = '/node';
        
      getData() : any {
        this.http.get(this.dataUrl).pipe(
            map(response => response.json())
            .subscribe(result => console.log(result)));
          }
        }

答案 7 :(得分:-1)

import import'rxjs / Rx'; 5.5.2版本有一些问题,因为每次导入我碰巧从import {Observable}从'rxjs / Rx'改为从'rxjs / Observable'导入{Observable};