Açısal - “ihraç üyesi 'Gözlenebilir' yok”


156

kod

hata bilgisi

Yazı kodu:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';

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

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }

}

hata bilgisi:

hata TS2307: 'rxjs-compat / Observable' modülü bulunamıyor. node_modules / rxjs / visible / of.d.ts (1,15): hata TS2307: 'rxjs-uyumlu / gözlemlenebilir / of' modülü bulunamıyor. src / app / hero.service.ts (2,10): hata TS2305: '' F: / Açısal kahraman turu / node_modules / rxjs / Observable "'modülünün dışa aktarılmış üyesi' Gözlemlenebilir 'yok. src / app / hero.service.ts (15,12): hata TS2304: 'of' adı bulunamıyor.

package.json Açısal versiyonlu dosya:

versiyon


3
Kullandığınız çerçeveye Açısal ad verilir. AngularJS farklı bir çerçevedir.
JB Nizet

9
Görünüşe göre RxJS 6 kullanıyorsunuz. Bu sürümü kullanırken içe aktarmaların değiştirilmesi gerekiyor (sürüm notlarına bakın). Angular 6 kullanmıyorsanız, RxJS 5 ile yapışmanız gerekir.
JB Nizet

thx.Angular6.0 kullanıyorum ~
Thomas Lee

5
İşte ilgili belgeler: next.angular.io/guide/rx-library . İçe aktarma işleminin kullandığınız ithalatlar olmadığını unutmayın.
JB Nizet

Yanıtlar:


205

Bu yararlı olabilir açısal 6 bu bkz fazla bilgi için Dokümanı

  1. rxjs: Oluşturma yöntemleri, türleri, zamanlayıcıları ve yardımcı programları
'rxjs' den aralık, birleştirme, fromEvent} öğesinden import {Observable, Subject, asapScheduler, pipe,;
  1. rxjs / operatörleri : Tüm borlanabilir operatörler:
'rxjs / operatörlerden' {map, filter, scan} dosyasını içe aktarın;
  1. rxjs / webSocket: Web soketi konu uygulaması
'rxjs / webSocket' öğesinden {webSocket} dosyasını içe aktarın;
  1. rxjs / ajax : Rx ajax uygulaması
'rxjs / ajax' klasöründen {ajax} dosyasını içe aktarın;
  1. rxjs / testing : Test yardımcı programları
'rxjs / testing' den {TestScheduler} dosyasını içe aktarın;

4
'bunu nasıl çözebilirsin?' ilk elden? SO arama, ancak kütüphane daha az kullanılmışsa çalışır.
cjb110

12
npm install rxjs-compat --save
EvAlex

115

Görünüşe göre (hata günlüğüne işaret ettiğiniz gibi), Angular 6.0.0'a yükselttikten sonra rxjs-compat eksik.

npm install rxjs-compat --saveYüklemek için çalıştırın . Düzeltmeli.


3
Ben de aynı sorunla karşı karşıyayım, ama geriye dönük uyumluluk paketi kullanmak istemiyorsam ne olacak?
Prasanna Sasne

2
Ya rxjs-compat kullanmak istemezsek?
Enrico

2
Bu doğru cevap olmalı. İleriye doğru giden doğru cevap değil ... ama kesinlikle "şu an" yanıtı.
William Terrill

96

Sadece koy:

import { Observable} from 'rxjs';

Aynen böyle. Az ya da çok bir şey yok.


6
'Rxjs / Observable' yerine 'rxjs' kullanmak sorunumu çözdü. Bence, sorunun sahibi cevabınızı kabul etmelidir.
Levent Divilioğlu

1
Bu kesinlikle işe yarayacak. Ama aynı zamanda Tree Shaking'i de destekliyor mu?
Sandy

56

Orijinal kodu ile değiştirdim import { Observable, of } from 'rxjs've sorun çözüldü.

resim açıklamasını buraya girin

resim açıklamasını buraya girin


30

RxJS 6 kullanıyorsunuz. Sadece değiştirin

import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';

tarafından

import { Observable, of } from 'rxjs';


10

Bana yardımcı olan şey:

  1. Tüm eski içe aktarma yollarından kurtulun ve bunları aşağıdaki gibi yenileriyle değiştirin:

    import { Observable , BehaviorSubject } from 'rxjs';)

  2. node_modulesKlasörü sil

  3. npm cache verify
  4. npm install

6

Benzer bir sorunum vardı. 6.x'ten en son 5.x sürümüne geri dönen RXJS, Açısal 5.2.x için düzeltildi.

Package.json dosyasını açın.

Değişim "rxjs": "^6.0.0",için"rxjs": "^5.5.10",

Çalıştırmak npm update


Bence bu rxjs 6 sadece Açısal 6'dan destekleneceğinden yapılacak en iyi şey.
David D.

4

Hemen kaldır /Observabledan'rxjs/Observable';

Daha sonra Cannot find module 'rxjs-compat/Observable'terminalin altına sadece aşağıdaki satırı koyarsanız enter tuşuna basın.

npm install --save rxjs-compat

2

Çözümüm şu içe aktarmayı ekliyordu: import { of } from 'rxjs/observable/of';

Yani değişiklikten sonra genel hero.service.ts kodu:

import { Injectable } from '@angular/core';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { of } from 'rxjs/observable/of';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class HeroService {

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }
}

Başladığı hata buydu, ihracat orada değil.
Zlatko

2

angular-splitBileşeni böylece uygulamada bağımlılık aşağıdaki açısal 6 ile uyumlu hale getirmek yüklemek için, açısal 6 desteklenmez

Güncellenene kadar bu işlemi yapmak için şunu kullanın:

"dependencies": {
"angular-split": "1.0.0-rc.3",
"rxjs": "^6.2.2",
    "rxjs-compat": "^6.2.2",
}

0

Benim durumumda bu hata oluştu çünkü bilgisayarımda ng cli eski bir sürümü vardı.

Sorun çalıştırıldıktan sonra çözüldü:

ng update

ng update @angular/cli


0

Güncelleme açısal-in-hafıza-web API sürümü. Kahramanların açısal turu sırasında yüklenen varsayılan açısal-bellek-web-api sürümü 0.4 idi. Benim durumumda bir cazibe gibi çalıştı. (RxJS 6 ile Açısal 7'yi kullanma)

npm i angular-in-memory-web-api@0.8.0

-3

kullanım return Observable.of(HEROES);


1
Bu cevap muhtemelen doğru ve yararlı olsa da, sorunun çözülmesine nasıl yardımcı olduğunu açıklamak için bununla birlikte bir açıklama eklemeniz tercih edilir. Bu, özellikle çalışmayı durdurmasına neden olan bir değişiklik varsa (muhtemelen ilgisiz) ve kullanıcıların bir zamanlar nasıl çalıştığını anlamaları gerekiyorsa, özellikle yararlı olur.
Erty Seidohl

Soruyu dikkatlice okursanız , 5 değil , Açısal 6 ve rxjs 6'dan bahsedersiniz. Bu sorun, rxjs v6 + için özelken, gönderdiğiniz çözüm rxjs (ve Angular) v5 ile ilgilidir.
Zlatko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.