2016-10-30 20 views
7

było wiele pytań o "mapa nie jest funkcją", ale prawie wszyscy po prostu nie zaimportowali biblioteki rxjs.mapa nie jest funkcją (Rxjs) mimo importowania

W moim przypadku importuję, ale błąd nadal istnieje.

pracuję z jońskich 2 iw ten sposób moje zależności package.json wyglądać następująco:

"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" 
} 

Tak to jest, jak tworzę moją usługę:

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)); 
    } 
} 

Próbowałem też ponownie zainstalować moduł rxjs, ale wciąż nie ma sukcesu. Może jest niekompatybilny z wersją jonową 2 lub aktualną wersją kątową?

Co myślicie chłopaki?

Cheers,

Andrej

+0

Czy możesz wyświetlić cały komunikat o błędzie? – martin

+0

spróbuj z tym również 'import 'rxjs/Rx'' – micronyks

Odpowiedz

2

utworzyć plik 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'; 

i nazwać kiedy w razie potrzeby.

import './rxjs-operators'; 
1

spróbować

import {Observable} from 'rxjs/Observable'; 

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

miałem ten sam problem.

Używam jspm z system.js. Dla mnie, gdy uaktualniłem mój system, używając jspm update, angular2-http wymagał [email protected], ale [email protected] wymagał [email protected], który jest wtedy tym, do którego zmapowany jest "rxjs". Przypuszczam, że to była najnowsza wersja? Odkryłem to wszystko, sprawdzając plik config.js utworzony przez jspm.

Więc widocznie kiedy stosowane oświadczenie ...

import 'rxjs/add/operator/map'; 

... to było dodanie do mapy do rxjs wersję 5.0.0-beta.12 który nie wersja, że ​​był przy użyciu http. Musiałem zmienić linię na ...

import 'npm:[email protected]/add/operator/map'; 

... a potem zadziałało.

+0

dzięki !.Właśnie zmieniłem numer wersji rxjs w twoim kodzie importu i zadziałało to dla mnie. –

0

próby

importu {} z iniekcyjne '@ kątowy/core'; importuj {Http, odpowiedź, nagłówki, URLSearchParams, RequestOptions} z '@ kątowego/http'; import {Observable} from 'rxjs/Observable'; importuj "rxjs/Rx";

-1

importować import "rxjs/Rx"; ma pewne problemy z wersją 5.5.2, ponieważ dla każdego importu zmienię się z importu {Observable} z 'rxjs/Rx' na import {Observable} z 'rxjs/Observable';

+1

Dwie rzeczy: Twoje zdanie jest niepełne. Byłoby wspaniale, gdyby można było opracować * lub * utworzyć kopię zapasową roszczenia za pomocą źródła. – MrPaulch

+0

@MrPaulch: Kiedy importujemy Observable jak import {Observable} z 'rxjs/Rx' tworzy problemy i musimy przenieść, aby zaimportować {Observable} z 'rxjs/Observable'; –