2016-07-15 2 views
0

В настоящее время я читаю библиотеки RxJS и занимаю некоторое время, чтобы пройти через некоторые из классов, предлагаемых некоторыми из его архитекторов и разработчиков, с целью включения этих знаний в приложение с угловым2. Мне сложно, хотя я не могу понять, как изменить синтаксис, поэтому я могу использовать RxJS, как я вижу в любом из примеров, которые не являются угловыми2. Например, если я пытаюсь создать наблюдателя в конструкторе:RxJS Angular 2 Syntax

this.$mouseObserver = Rx.Observer.create(
     function (x) { 
    console.log('Next: %s', x); 
    }, 
    function (err) { 
    console.log('Error: %s', err); 
    }, 
    function() { 
    console.log('Completed'); 
    }); 

Rx всегда приходит неопределенными, даже после его импорта. Наблюдатель и Наблюдаемый импорт штрафа, а также методы для них. Я что-то пропустил? Каждая часть документации для RxJS начинается почти с Rx., но я не видел ни одного учебника Angular 2, в котором используется этот синтаксис.

ответ

1

Если вы:

import { Observer } from 'rxjs/Observer'; 

или:

import { Observer } from 'rxjs/Rx'; 

вы будете использовать Observer.create (без Rx.). Чтобы использовать Rx.Observer, вам необходимо import * as Rx from 'rxjs/Rx';

Обычно предпочтительнее импортировать отдельные классы/объекты, поэтому вы видите больше импорта этой формы. Rx. форма обычно наблюдается, когда библиотека Rx не импортируется (например, проект не построен в node среде), но ссылки из <script src="..."> тега

EDIT: В ответ на комментарий С. Кернс в:

наблюдателей , в определении типа RxJS 5, является интерфейсом. Он не имеет реализации, и он не компилируется в javascript. Таким образом, вы не можете назвать какую-либо функцию. Интерфейс объявлен как:

export interface Observer<T> { 
    isUnsubscribed?: boolean; 
    next: (value: T) => void; 
    error: (err: any) => void; 
    complete:() => void; 
} 

В вашем случае, объявить $mouseObserver как Observer<any> и это должно работать:

this.$mouseObserver = { 
    next: function (x) { 
    console.log('Next: %s', x); 
    }, 
    error: function (err) { 
    console.log('Error: %s', err); 
    }, 
    complete: function() { 
    console.log('Completed'); 
    } 
}; 
+0

это делает много смысла. Однако, импортируя только Observer и используя 'this. $ MouseObserver = Observer.create', я получаю ошибку:' не может найти имя 'Observer'' и импортировать 'import * как Rx из' rxjs/Rx ';' и используя ' Rx.Observer.create' дает мне ошибку 'property observer не существует на typeof –

+0

Это и для Observables. У меня есть аналогичная проблема с использованием 'Rx'. Я хотел создать Observable из массива, но как-то застрял в 'Rx'. У меня есть вопрос: «http: // stackoverflow.com/questions/43177833/невозможно-импортировать-rx-to-my-angular-2-application', @Can Nguyen вы можете дать ответ? –

+0

С предлагаемым импортом, используя Observable.from ([1,2,3]). Я получаю сообщение об ошибке 'from'. Импорт «из» из «import» rxjs/add/observable/from'' тоже не помогает. –

Смежные вопросы