Angular2 Ошибка RxJS 'Observable_1.Observable.fromEvent не является функцией'
Я использую AngularJS 2 Beta 0, и я пытаюсь создать RxJS Observable из события на объекте window. Я считаю, что знаю формулу для захвата события как наблюдаемого в моем сервисе:
var observ = Observable.fromEvent(this.windowHandle, 'hashchange');
Проблема в том, что каждый раз, когда я пытаюсь запустить этот код, я получаю сообщение об ошибке, указывающее, что 'fromEvent' не является функцией.
Uncaught EXCEPTION: Error during evaluation of "click"
ORIGINAL EXCEPTION: TypeError: Observable_1.Observable.fromEvent is not a function
Похоже, мне кажется, что я не правильно обрабатываю свой import
сейчас, когда RxJS не включен в сборку Angular 2, хотя остальная часть моего приложения функционирует правильно, что для меня означает, что RxJS где он должен быть.
Мой импорт в сервисе выглядит следующим образом:
import {Observable} from 'rxjs/Observable';
Хотя я также попытался использовать это вместо (с соответствующими изменениями в коде) с теми же результатами:
import {FromEventObservable} from 'rxjs/observable/fromEvent';
У меня есть следующая конфигурация в моем Index.html:
<script>
System.config({
map: {
rxjs: 'node_modules/rxjs'
},
packages: {
'app': {defaultExtension: 'js'},
'rxjs': {defaultExtension: 'js'}
}
});
System.import('app/app');
</script>
Может кто-нибудь сказать мне, что я делаю неправильно?
Ответы
Ответ 1
Проблема заключалась в том, что оператор import должен выглядеть следующим образом:
import {Observable} from 'rxjs/Rx';
Обратите внимание, что Observable
вводится с rxjs/Rx
вместо rxjs/Observable
. Как упоминает @EricMartinez, потянув его таким образом, вы автоматически получите все операторы (например, .map()
).
Ответ 2
Определенно не нужно импортировать сразу всех операторов! Вы просто импортировали fromEvent
неправильно.
Вы можете сделать это следующим образом:
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';
EDIT: В дополнение к тому, что я уже написал: древовидное с AoT-компилятором angular удаляет неиспользуемый код, основываясь на том, что вы импортируете. Если вы просто импортируете некоторые объекты или функции из rxjs/rx, компилятор ничего не может удалить. Всегда импортируйте именно то, что вам нужно!