ฉันมีปัญหากับObservable.of
ฟังก์ชั่นการนำเข้าในโครงการของฉัน Intellij ของฉันเห็นทุกสิ่ง ในรหัสของฉันฉันมี:
import {Observable} from 'rxjs/Observable';
และในรหัสของฉันฉันใช้มันเหมือนที่:
return Observable.of(res);
ความคิดใด ๆ
ฉันมีปัญหากับObservable.of
ฟังก์ชั่นการนำเข้าในโครงการของฉัน Intellij ของฉันเห็นทุกสิ่ง ในรหัสของฉันฉันมี:
import {Observable} from 'rxjs/Observable';
และในรหัสของฉันฉันใช้มันเหมือนที่:
return Observable.of(res);
ความคิดใด ๆ
คำตอบ:
ที่จริงฉันนำเข้ามายุ่ง ในเวอร์ชันล่าสุดของ RxJS เราสามารถนำเข้าได้เช่น:
import 'rxjs/add/observable/of';
operator/
- rxjs/add/operator/of
- observable/
แทน D'โอ้
หากใครมีปัญหานี้ขณะใช้งาน Angular 6 / rxjs 6 ดูคำตอบที่นี่: ไม่สามารถใช้ Observable.of ใน RxJs 6 และ Angular 6
กล่าวโดยย่อคุณต้องนำเข้าแบบนี้:
import { of } from 'rxjs';
แล้วแทนที่จะโทร
Observable.of(res);
เพียงแค่ใช้
of(res);
แม้ว่ามันจะฟังดูแปลก ๆ อย่างกับฉันมันสำคัญที่จะใช้ประโยชน์ 'O' import {Observable} from 'rxjs/Observable
ในเส้นทางนำเข้าของ เกิดข้อผิดพลาดกับการเข้าพักในปัจจุบันถ้าผมนำเข้าสังเกตจากobservable_1.Observable.of is not a function
rxjs/observable
แปลก แต่ฉันหวังว่ามันจะช่วยคนอื่น
ถ้าคุณใช้ Angular 6/7
import { of } from 'rxjs';
แล้วแทนที่จะโทร
Observable.of(res);
เพียงแค่ใช้
of(res);
ความผิดพลาดที่โง่เขลาของฉันคือฉันลืมเพิ่ม/add
เมื่อต้องมีสิ่งที่สังเกตได้
คือ:
import { Observable } from 'rxjs/Observable';
import 'rxjs/observable/of';
rxjs/observable/of
อันที่จริงแล้วไฟล์OK นั้นมีอยู่จริง
ควรจะเป็น:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
การปะแก้ไม่ได้ผลสำหรับฉันไม่ว่าจะด้วยเหตุผลใดก็ตามดังนั้นฉันจึงต้องใช้วิธีนี้:
import { of } from 'rxjs/observable/of'
// ...
return of(res)
เพียงเพิ่ม
หากคุณใช้หลายคนคุณสามารถนำเข้าทั้งหมดโดยใช้
import 'rxjs/Rx';
ตามที่กล่าวถึงโดย @Thierry Templier แต่ฉันคิดว่าถ้าคุณกำลังใช้ตัวดำเนินการที่ จำกัด คุณควรนำเข้าตัวดำเนินการแต่ละอย่างเช่น
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/of';
ตามที่กล่าวถึง @uksz
เพราะ 'rxjs / Rx' จะนำเข้าส่วนประกอบ Rx ทั้งหมดซึ่งแน่นอนว่าคุ้มค่า
คุณสามารถนำเข้าตัวดำเนินการทั้งหมดด้วยวิธีนี้:
import {Observable} from 'rxjs/Rx';
import { Observable } from 'rxjs/Observable' import 'rxjs/add/observable/of';
ไม่ทำงาน ใช้import {Observable} from 'rxjs/Rx';
งานได้เท่านั้น รุ่นคือ 5.4.2
Observable_1.Observable.of(...).delay(...).timeout is not a function
ความจริงก็คือผมได้ ฉันไม่ได้ใช้import 'rxjs/add/operator/timeout'
ฉันใช้ Angular 5.2 และ RxJS 5.5.6
รหัสนี้ใช้ไม่ได้ :
import { Observable,of } from 'rxjs/Observable';
getHeroes(): Observable<Hero[]> {
return of(Hero[]) HEROES;
}
ทำงานรหัสด้านล่าง:
import { Observable } from 'rxjs/Observable';
import { Subscriber } from 'rxjs/Subscriber';
getHeroes(): Observable<Hero[]>
{
return Observable.create((observer: Subscriber<any>) => {
observer.next(HEROES);
observer.complete();
});
}
วิธีการโทร:
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes);
ฉันคิดว่าพวกเขาอาจย้าย / เปลี่ยนแปลงการทำงาน () ใน RxJS 5.5.2
สิ่งนี้จะทำงานได้อย่างถูกต้องเพียงลองดู
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
// "rxjs": "^5.5.10"
import { of } from 'rxjs/observable/of';
....
return of(res)
อัปเกรดจาก Angular 5 / Rxjs 5 เป็น Angular 6 / Rxjs 6 หรือไม่
คุณต้องเปลี่ยนการนำเข้าและอินสแตนซ์ของคุณ ลองดูโพสต์บล็อกของ 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
เมื่ออัพเกรดเป็นไลบรารี่รุ่นที่ 6 RxJS
และไม่ได้ใช้rxjs-compat
แพ็คเกจดังต่อไปนี้
import 'rxjs/add/observable/of';
// ...
return Observable.of(res);
จะต้องมีการเปลี่ยนเป็น
import { of } from 'rxjs';
// ...
return of(res);
สำหรับฉัน (Angular 5 & RxJS 5) การนำเข้าการเติมข้อความอัตโนมัติที่แนะนำ:
import { Observable } from '../../../../../node_modules/rxjs/Observable';
ในขณะที่การควรจะเป็น (กับผู้ประกอบการทั้งหมดคงfrom
, of
, ect ปรับการทำงาน:
import { Observable } from 'rxjs/Observable';
ฉันมีปัญหานี้ในวันนี้ ฉันใช้ systemjs เพื่อโหลดการอ้างอิง
ฉันกำลังโหลด Rxjs เช่นนี้:
...
paths: {
"rxjs/*": "node_modules/rxjs/bundles/Rx.umd.min.js"
},
...
แทนที่จะใช้เส้นทางใช้สิ่งนี้:
var map = {
...
'rxjs': 'node_modules/rxjs',
...
}
var packages = {
...
'rxjs': { main: 'bundles/Rx.umd.min.js', defaultExtension: 'js' }
...
}
การเปลี่ยนแปลงเล็กน้อยในวิธีที่ระบบโหลดไลบรารีแก้ไขปัญหาของฉัน
สำหรับเชิงมุม 5+:
import { Observable } from 'rxjs/Observable';
ควรทำงาน. แพ็คเกจผู้สังเกตการณ์ควรตรงกับการนำเข้าเช่นกันimport { Observer } from 'rxjs/Observer';
หากคุณใช้ผู้สังเกตการณ์นั่นคือ
import {<something>} from 'rxjs';
นำเข้าจำนวนมากจึงควรหลีกเลี่ยง
import 'rxjs/add/observable/of';
แสดงความต้องการของ rxjs-compat
require("rxjs-compat/add/observable/of");
ฉันไม่ได้ติดตั้งสิ่งนี้ ติดตั้งโดย
npm install rxjs-compat --save-dev
และทำการแก้ไขปัญหาของฉันอีกครั้ง
ในrxjs
v6 of
ตัวดำเนินการควรถูกนำเข้าเป็นimport { of } from 'rxjs';
ยังไงก็ตาม Webstorm ก็ทำแบบนี้import {of} from 'rxjs/observable/of';
และทุกอย่างก็เริ่มทำงาน
import { of } from 'rxjs'; return of(res);
github.com/ReactiveX/rxjs/blob/master/MIGRATION.md#import-paths & github.com/ReactiveX/rxjs/blob/master/ เป็นต้น