Подтвердить что ты не робот

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>

Может кто-нибудь сказать мне, что я делаю неправильно?

4b9b3361

Ответ 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, компилятор ничего не может удалить. Всегда импортируйте именно то, что вам нужно!