Angular -“ ไม่มีสมาชิกที่ส่งออก 'สังเกตได้””


156

รหัส

ข้อมูลผิดพลาด

รหัสตัวพิมพ์:

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

}

ข้อมูลข้อผิดพลาด:

ข้อผิดพลาด TS2307: ไม่พบโมดูล 'rxjs-compat / Observable' โมดูล node_modules / rxjs / observable / of.d.ts (1,15): ข้อผิดพลาด TS2307: ไม่พบโมดูล 'rxjs-compat / observable / of' โมดูล src / app / hero.service.ts (2,10): ข้อผิดพลาด TS2305: โมดูล '"F: / angular-tour-of-heroes / node_modules / rxjs / Observable"' ไม่มีสมาชิกที่ส่งออก 'Observable' src / app / hero.service.ts (15,12): ข้อผิดพลาด TS2304: ไม่พบชื่อ 'ของ'

package.json ไฟล์ที่มีรุ่นแองกูลาร์:

รุ่น


3
กรอบงานที่คุณใช้นั้นมีชื่อว่า Angular AngularJS เป็นกรอบงานที่แตกต่างกัน
JB Nizet

9
ดูเหมือนว่าคุณกำลังใช้ RxJS 6 จำเป็นต้องเปลี่ยนการนำเข้าเมื่อใช้รุ่นนั้น (ดูบันทึกประจำรุ่น) หากคุณไม่ได้ใช้ Angular 6 คุณควรใช้ RxJS 5
JB Nizet

ขอบคุณฉันใช้ Angular6.0 ~
Thomas Lee

5
นี่คือเอกสารที่เกี่ยวข้องแล้ว: next.angular.io/guide/rx-library โปรดทราบว่าการนำเข้าไม่ใช่สิ่งที่คุณกำลังใช้
JB Nizet

คำตอบ:


205

สิ่งนี้อาจมีประโยชน์ในAngular 6 สำหรับข้อมูลเพิ่มเติมอ้างอิงเอกสารนี้

  1. rxjs:วิธีสร้าง, ชนิด, ตัวกำหนดตารางเวลาและยูทิลิตี
นำเข้า {Observable, Subject, asapScheduler, ไปป์, จาก, จาก, ช่วงเวลา, ผสาน, fromEvent} จาก 'rxjs';
  1. rxjs / โอเปอเรเตอร์ : ตัวดำเนินการที่ไปป์ทั้งหมด:
นำเข้า {map, filter, scan} จาก 'rxjs / โอเปอเรเตอร์';
  1. rxjs / webSocket:การดำเนินการเรื่องซ็อกเก็ตเว็บ
นำเข้า {webSocket} จาก 'rxjs / webSocket';
  1. rxjs / ajax : การใช้งาน Rx ajax
นำเข้า {ajax} จาก 'rxjs / ajax';
  1. rxjs / testing : เครื่องมือทดสอบ
นำเข้า {TestScheduler} จาก 'rxjs / การทดสอบ';

4
คุณจะ 'ทำสิ่งนี้ออกมาได้อย่างไร' จากมือแรก? การค้นหา SO ใช้งานได้ แต่ถ้าไลบรารีนั้นถูกใช้น้อยกว่า
cjb110

12
npm install rxjs-compat --save
EvAlex

115

เห็นได้ชัดว่า (ตามที่คุณระบุในบันทึกข้อผิดพลาด) หลังจากอัปเดตเป็น Angular 6.0.0 rxjs-compat หายไป

เรียกใช้npm install rxjs-compat --saveเพื่อติดตั้ง ควรแก้ไข


3
ฉันกำลังประสบปัญหาเดียวกันด้วย แต่ถ้าฉันไม่ต้องการใช้แพ็คเกจความเข้ากันได้แบบย้อนหลัง
Prasanna Sasne

2
หากเราไม่ต้องการใช้ rxjs-compat
Enrico

2
นี่ควรเป็นคำตอบที่ถูกต้อง มันไม่ใช่คำตอบที่ถูกต้องที่จะก้าวไปข้างหน้า ... แต่แน่นอนว่าเป็นคำตอบ "ตอนนี้"
William Terrill

96

เพียงแค่ใส่:

import { Observable} from 'rxjs';

เป็นแบบนั้น. ไม่มากก็น้อย


6
การใช้ 'rxjs' แทน 'rxjs / Observable' เพียงแก้ไขปัญหาของฉัน ฉันคิดว่าเจ้าของคำถามควรยอมรับคำตอบของคุณ
Levent Divilioglu

1
นี้จะทำงานได้อย่างแน่นอน แต่มันยังรองรับ Tree Shaking ด้วยหรือไม่
Sandy


30

คุณกำลังใช้ RxJS 6 เพียงแทนที่

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

โดย

import { Observable, of } from 'rxjs';


10

สิ่งที่ช่วยฉันคือ

  1. กำจัดเส้นทางการนำเข้าเก่าทั้งหมดและแทนที่ด้วยเส้นทางใหม่เช่นนี้:

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

  2. ลบnode_modulesโฟลเดอร์

  3. npm cache verify
  4. npm install

6

ฉันมีปัญหาที่คล้ายกัน แก้ไขการย้อนกลับ RXJS จาก 6.x ไปเป็น 5.x รีลีสล่าสุดแก้ไขสำหรับ Angular 5.2.x

เปิด package.json

เปลี่ยน"rxjs": "^6.0.0",เป็น"rxjs": "^5.5.10",

วิ่ง npm update


ฉันคิดว่านี่เป็นสิ่งที่ดีที่สุดที่จะทำได้เนื่องจาก rxjs 6 จะได้รับการสนับสนุนจาก Angular 6 เท่านั้น
David D.

4

เพียงลบ /Observableจาก'rxjs/Observable';

หากคุณได้รับCannot find module 'rxjs-compat/Observable'เพียงแค่ใส่บรรทัดด้านล่างเพื่อเทอร์มินัลแล้วกด Enter

npm install --save rxjs-compat

2

ความละเอียดของฉันเพิ่มการนำเข้าต่อไปนี้: import { of } from 'rxjs/observable/of';

ดังนั้นรหัสโดยรวมของ hero.service.ts หลังจากการเปลี่ยนแปลงคือ:

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

นั่นเป็นข้อผิดพลาดที่เขาเริ่มต้นด้วยการส่งออกไม่ได้อยู่ที่นั่น
Zlatko

2

angular-splitองค์ประกอบที่ไม่ได้รับการสนับสนุนในเชิงมุม 6 เพื่อที่จะทำให้มันเข้ากันได้กับเชิงมุม 6 ติดตั้งต่อไปนี้การพึ่งพาในใบสมัครของคุณ

ในการทำให้มันใช้งานได้จนกว่าจะมีการปรับปรุงให้ใช้:

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

0

ในกรณีของฉันข้อผิดพลาดนี้เกิดขึ้นเพราะฉันมี ng cli รุ่นเก่าในคอมพิวเตอร์ของฉัน

ปัญหาได้รับการแก้ไขหลังจากใช้งาน:

ng update

ng update @angular/cli


0

อัปเดตเวอร์ชันเชิงมุมในหน่วยความจำเว็บ ค่าเริ่มต้นเวอร์ชันเชิงมุมในหน่วยความจำ - เว็บ -i-api ที่ติดตั้งในระหว่างการฝึกอบรมเชิงมุมทัวร์ของฮีโร่คือ 0.4 มันทำงานเหมือนมีเสน่ห์ในกรณีของฉัน (การใช้เชิงมุม 7 กับ RxJS 6)

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

-3

ใช้ return Observable.of(HEROES);


1
แม้ว่าคำตอบนี้อาจจะถูกต้องและมีประโยชน์ แต่ก็เป็นที่ต้องการถ้าคุณมีคำอธิบายมาด้วยเพื่ออธิบายว่ามันช่วยแก้ปัญหาได้อย่างไร สิ่งนี้จะเป็นประโยชน์อย่างยิ่งในอนาคตหากมีการเปลี่ยนแปลง (อาจไม่เกี่ยวข้อง) ที่ทำให้หยุดทำงานและผู้ใช้จำเป็นต้องเข้าใจว่ามันทำงานอย่างไร
Erty Seidohl

หากคุณอ่านคำถามอย่างละเอียดคุณจะเห็นกล่าวถึง Angular 6และ rxjs 6ไม่ใช่ 5 ปัญหานี้เป็นปัญหาเฉพาะสำหรับ rxjs v6 + ในขณะที่โซลูชันที่คุณโพสต์เกี่ยวข้องกับ rxjs (และ Angular) v5
Zlatko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.