Câu trả lời:
Thật ra tôi đã nhập sai. Trong phiên bản mới nhất của RxJS, chúng ta có thể nhập nó như thế:
import 'rxjs/add/observable/of';
operator/
- rxjs/add/operator/of
- thay vì observable/
. Cô ơi.
Nếu bất cứ ai gặp vấn đề này trong khi sử dụng Angular 6 / rxjs 6, hãy xem câu trả lời tại đây: Không thể sử dụng Observable.of trong RxJs 6 và Angular 6
Nói tóm lại, bạn cần nhập nó như thế này:
import { of } from 'rxjs';
Và sau đó thay vì gọi
Observable.of(res);
chỉ dùng
of(res);
Mặc dù nghe có vẻ hoàn toàn lạ, nhưng với tôi, việc viết hoa chữ 'O' trong đường nhập khẩu là rất quan trọng import {Observable} from 'rxjs/Observable
. Thông báo lỗi observable_1.Observable.of is not a function
vẫn còn nếu tôi nhập từ có thể quan sát được rxjs/observable
. Lạ nhưng tôi hy vọng nó giúp được người khác.
Nếu bạn đang sử dụng Angular 6/7
import { of } from 'rxjs';
Và sau đó thay vì gọi
Observable.of(res);
chỉ dùng
of(res);
Sai lầm ngớ ngẩn của tôi là tôi đã quên thêm /add
khi yêu cầu quan sát.
Là:
import { Observable } from 'rxjs/Observable';
import 'rxjs/observable/of';
Mà trực quan trông OK rxjs/observable/of
tập tin becasue , trên thực tế, tồn tại.
Nên là:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
Dù sao đi nữa, patching không hiệu quả với tôi, vì vậy tôi phải dùng đến phương pháp này:
import { of } from 'rxjs/observable/of'
// ...
return of(res)
Chỉ cần thêm,
nếu bạn đang sử dụng nhiều trong số họ thì bạn có thể nhập tất cả bằng cách sử dụng
import 'rxjs/Rx';
như được đề cập bởi @Thierry Templier. Nhưng tôi nghĩ rằng nếu bạn đang sử dụng toán tử giới hạn thì bạn nên nhập toán tử riêng lẻ như
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/of';
như được đề cập bởi @uksz.
Bởi vì 'rxjs / Rx' sẽ nhập tất cả các thành phần Rx mà chắc chắn chi phí hiệu suất.
Bạn cũng có thể nhập tất cả các toán tử theo cách này:
import {Observable} from 'rxjs/Rx';
import { Observable } from 'rxjs/Observable' import 'rxjs/add/observable/of';
không hoạt động. Chỉ import {Observable} from 'rxjs/Rx';
hoạt động. Phiên bản là 5.4.2
Observable_1.Observable.of(...).delay(...).timeout is not a function
. Tôi đã không sử dụngimport 'rxjs/add/operator/timeout'
Tôi đang sử dụng Angular 5.2 và RxJS 5.5.6
Mã này không hoạt động:
import { Observable,of } from 'rxjs/Observable';
getHeroes(): Observable<Hero[]> {
return of(Hero[]) HEROES;
}
Mã dưới đây hoạt động:
import { Observable } from 'rxjs/Observable';
import { Subscriber } from 'rxjs/Subscriber';
getHeroes(): Observable<Hero[]>
{
return Observable.create((observer: Subscriber<any>) => {
observer.next(HEROES);
observer.complete();
});
}
Phương thức gọi:
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes);
Tôi nghĩ rằng họ có thể di chuyển / thay đổi chức năng () trong RxJS 5.5.2
Điều này nên hoạt động đúng chỉ cần thử nó.
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
// "rxjs": "^5.5.10"
import { of } from 'rxjs/observable/of';
....
return of(res)
Nâng cấp từ Angular 5 / Rxjs 5 lên Angular 6 / Rxjs 6?
Bạn phải thay đổi nhập khẩu và khởi tạo của bạn. Kiểm tra bài viết trên blog của Damien
Tl; dr:
import { Observable, fromEvent, of } from 'rxjs';
const yourResult = Observable
.create(of(yourObservable))
.startWith(null)
.map(x => x.someStringProperty.toLowerCase());
//subscribe to keyup event on input element
Observable
.create(fromEvent(yourInputElement, 'keyup'))
.debounceTime(5000)
.distinctUntilChanged()
.subscribe((event) => {
yourEventHandler(event);
});
RxJS 6
Khi nâng cấp lên phiên bản 6 của RxJS
thư viện và không sử dụng rxjs-compat
gói mã sau đây
import 'rxjs/add/observable/of';
// ...
return Observable.of(res);
phải đổi thành
import { of } from 'rxjs';
// ...
return of(res);
Tôi đã có vấn đề này ngày hôm nay. Tôi đang sử dụng systemjs để tải các phụ thuộc.
Tôi đã tải Rxjs như thế này:
...
paths: {
"rxjs/*": "node_modules/rxjs/bundles/Rx.umd.min.js"
},
...
Thay vì sử dụng đường dẫn sử dụng này:
var map = {
...
'rxjs': 'node_modules/rxjs',
...
}
var packages = {
...
'rxjs': { main: 'bundles/Rx.umd.min.js', defaultExtension: 'js' }
...
}
Sự thay đổi nhỏ này trong cách systemjs tải thư viện đã khắc phục vấn đề của tôi.
Đối với góc 5+:
import { Observable } from 'rxjs/Observable';
nên làm việc. Gói quan sát cũng phải phù hợp với quá trình nhập import { Observer } from 'rxjs/Observer';
nếu bạn đang sử dụng trình quan sát đó là
import {<something>} from 'rxjs';
thực hiện một nhập khẩu lớn vì vậy tốt hơn là tránh nó.
Trong rxjs
v6, of
toán tử phải được nhập dưới dạngimport { of } from 'rxjs';
Bằng cách nào đó, ngay cả Webstorm cũng làm như thế này import {of} from 'rxjs/observable/of';
và mọi thứ bắt đầu hoạt động
import { of } from 'rxjs'; return of(res);
github.com/ReactiveX/rxjs/blob/master/MIGRATION.md#import-paths & github.com/ReactiveX/rxjs/blob/master/...