Відповіді:
Насправді я імпорт зіпсував. В останній версії RxJS ми можемо імпортувати його так:
import 'rxjs/add/observable/of';
operator/
- rxjs/add/operator/of
- замість observable/
. D'oh.
Якщо у когось виникає ця проблема під час використання 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
файл, насправді, існує.
Має бути:
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)
Оновлено з кутових 5 / Rxjs 5 до кутових 6 / Rxjs 6?
Ви повинні змінити свій імпорт та інформацію. Перегляньте допис у блозі Даміена
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);
});
У мене сьогодні була ця проблема. Я використовую 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';
робить величезний імпорт, тому краще уникати цього.
У 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/…