Angular - không có thành viên xuất khẩu 'Quan sát được'


156

mã

thông tin lỗi

Mã bản in:

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

}

thông tin lỗi:

lỗi TS2307: Không thể tìm thấy mô-đun 'rxjs-compat / Observable'. node_modules / rxjs / obsable / of.d.ts (1,15): lỗi TS2307: Không thể tìm thấy mô-đun 'rxjs-compat / obsable / of'. src / app / hero.service.ts (2.10): lỗi TS2305: Module '"F: / angular-tour-of-hero / node_modules / rxjs / Observable"' không có thành viên xuất khẩu 'Có thể quan sát được'. src / app / hero.service.ts (15,12): lỗi TS2304: Không thể tìm thấy tên 'của'.

package.json tập tin với phiên bản Angular:

phiên bản


3
Khung bạn đang sử dụng có tên là Angular. AngularJS là một khung khác nhau.
JB Nizet

9
Có vẻ như bạn đang sử dụng RxJS 6. Việc nhập cần phải được thay đổi khi sử dụng phiên bản đó (xem ghi chú phát hành). Nếu bạn không sử dụng Angular 6, thì bạn nên gắn bó với RxJS 5.
JB Nizet

thx. Tôi đang sử dụng Angular6.0 ~
Thomas Lee

5
Đây là tài liệu liên quan sau đó: next.angular.io/guide/rx-l Library . Lưu ý rằng hàng nhập khẩu không phải là hàng bạn đang sử dụng.
JB Nizet

Câu trả lời:


205

Điều này có thể hữu ích trong Angular 6 để biết thêm thông tin tham khảo Tài liệu này

  1. rxjs: Phương thức tạo, loại, lịch trình và tiện ích
nhập {Có thể quan sát, Chủ đề, asapScheduler, pipe, of, from, distance, merge, fromEvent} từ 'rxjs';
  1. rxjs / toán tử : Tất cả các toán tử có thể điều chỉnh:
nhập {map, bộ lọc, quét} từ 'rxjs / toán tử';
  1. rxjs / webSocket: Việc thực hiện chủ đề ổ cắm web
nhập {webSocket} từ 'rxjs / webSocket';
  1. rxjs / ajax : Việc thực hiện Rx ajax
nhập {ajax} từ 'rxjs / ajax';
  1. rxjs / tests : Các tiện ích thử nghiệm
nhập {TestScheduler} từ 'rxjs / tests';

4
Làm thế nào bạn có thể 'làm việc này ra?' từ bàn tay đầu tiên? tìm kiếm SO hoạt động, nhưng nếu thư viện ít được sử dụng.
cjb110

12
npm cài đặt rxjs-compat --save
EvAlex

115

Rõ ràng (như bạn chỉ ra trong nhật ký lỗi), sau khi cập nhật lên Angular 6.0.0 rxjs-compat bị thiếu.

Chạy npm install rxjs-compat --saveđể cài đặt. Nên sửa nó.


3
Tôi cũng đang đối mặt với vấn đề tương tự, nhưng nếu tôi không muốn sử dụng gói tương thích ngược thì sao?
Prasanna Sasne

2
Nếu chúng ta không muốn sử dụng rxjs-compat thì sao?
Enrico

2
Đây phải là câu trả lời chính xác. Đó không phải là câu trả lời đúng di chuyển về phía trước ... nhưng đó chắc chắn là câu trả lời "ngay bây giờ".
William Terrill

96

Chỉ cần đặt:

import { Observable} from 'rxjs';

Chỉ cần như vậy. Không có gì nhiều hay ít.


6
Sử dụng 'rxjs' thay vì 'rxjs / Observable' chỉ giải quyết được vấn đề của tôi. Tôi nghĩ, chủ sở hữu của câu hỏi nên chấp nhận câu trả lời của bạn.
Levent Divilioglu

1
Điều này chắc chắn sẽ làm việc. Nhưng nó cũng hỗ trợ Lắc cây?
Sandy

56

Tôi đã thay thế mã ban đầu import { Observable, of } from 'rxjs'và vấn đề được giải quyết.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


30

Bạn đang sử dụng RxJS 6. Chỉ cần thay thế

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

bởi

import { Observable, of } from 'rxjs';

20

Thử cái này:

npm install rxjs-compat --save

1
Trên thực tế, điều này đã giải quyết vấn đề ở góc 8 ion 5
PhpCoder

10

Điều giúp tôi là:

  1. Loại bỏ tất cả các đường dẫn nhập cũ và thay thế chúng bằng các đường dẫn mới như thế này:

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

  2. Xóa node_modulesthư mục

  3. npm cache verify
  4. npm install

6

Tôi đã có một vấn đề tương tự. RXJS quay lại từ 6.x đến bản phát hành 5.x mới nhất đã sửa nó cho Angular 5.2.x.

Mở gói.json.

Thay đổi "rxjs": "^6.0.0",thành"rxjs": "^5.5.10",

chạy npm update


Tôi nghĩ rằng đây là điều tốt nhất để làm vì rxjs 6 sẽ chỉ được hỗ trợ từ Angular 6.
David D.

4

Chỉ cần xóa /Observablekhỏi'rxjs/Observable';

Nếu sau đó bạn Cannot find module 'rxjs-compat/Observable'chỉ cần đặt dòng dưới đây để thiết bị đầu cuối và nhấn enter.

npm install --save rxjs-compat

2

Nghị quyết của tôi đã thêm nhập sau: import { of } from 'rxjs/observable/of';

Vì vậy, mã tổng thể của hero.service.ts sau khi thay đổi là:

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

Vâng, đó là lỗi anh ấy bắt đầu, xuất khẩu không có.
Zlatko

2

Thành angular-splitphần này không được hỗ trợ trong Angular 6, vì vậy để làm cho nó tương thích với cài đặt Angular 6 sau sự phụ thuộc trong ứng dụng của bạn

Để làm việc này cho đến khi nó được cập nhật, hãy sử dụng:

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

0

Trong trường hợp của tôi, lỗi này đã xảy ra vì tôi có một phiên bản cũ của ng cli trong máy tính.

Vấn đề đã được giải quyết sau khi chạy:

ng update

ng update @angular/cli


0

Cập nhật phiên bản angular-in-memory-web-api . Phiên bản angular-in-memory-web-api mặc định được cài đặt trong hướng dẫn angular-tour-of-hero là 0,4. Nó làm việc như một lá bùa trong trường hợp của tôi. (Sử dụng Angular 7 với RxJS 6)

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

-3

sử dụng return Observable.of(HEROES);


1
Mặc dù câu trả lời này có thể đúng và hữu ích, nhưng nó được ưu tiên nếu bạn bao gồm một số giải thích cùng với nó để giải thích cách nó giúp giải quyết vấn đề. Điều này trở nên đặc biệt hữu ích trong tương lai, nếu có một sự thay đổi (có thể không liên quan) khiến nó ngừng hoạt động và người dùng cần phải hiểu nó đã hoạt động như thế nào.
Erty Seidohl

Nếu bạn đọc kỹ câu hỏi, bạn sẽ thấy đề cập đến Angular 6 và rxjs 6 , chứ không phải 5. Vấn đề này dành riêng cho rxjs v6 +, trong khi giải pháp bạn đăng có liên quan đến rxjs (và Angular) v5.
Zlatko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.