2015-12-21 26 views
37

我正在使用AngularJS 2 Beta 0,我試圖從窗口對象上的事件創建RxJS Observable。我相信我知道捕獲事件作爲可觀察到的在我服務的公式:Angular2 RxJS獲取'Observable_1.Observable.fromEvent不是函數'錯誤

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中的角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> 

有人可以告訴我什麼我做錯了嗎?

回答

66

的問題似乎是import語句應該是這樣的:

import {Observable} from 'rxjs/Rx'; 

注意Observable正在從rxjs/Rx而不是從rxjs/Observable帶來英寸As @EricMartinez mentions,以這種方式拉動它會自動讓你所有的操作員(如.map())。

+9

爲什麼我們要添加一切從rxjs,我們不能只添加所需的部分 –

+0

@MahmoudHboubati是的,你可以帶入只需要的部分。請參閱下面的答案。這是導入東西的正確方法,以便您不會膨脹資產包。 – SgtPooki

+2

這是不推薦使用..你應該永遠不會導入所有的運營商(因此從來沒有使用從'rxjs/RX' – Mackelito

76

它絕對不需要一次導入所有操作員!您剛剛輸入fromEvent錯誤。 你可以做這樣的:

import {Observable} from 'rxjs/Observable'; 
import 'rxjs/add/observable/fromEvent'; 

編輯:在addititon什麼,我已經寫:有角的AOT編譯器樹搖刪除未使用的代碼,根據你輸入的內容。如果你只是從rxjs/rx導入一些對象或函數,編譯器不能刪除任何東西。總是導入,你需要什麼!

+3

請注意,你必須大寫'O'在rxjs/Observable中,我一直在尋找這個錯誤 –

+2

這是更好的答案,導入所有的rxjs肯定會減慢你的啓動時間 – ccnokes

+0

即使@ Michael_Oryl解決了它,這絕對是更好的解決方案 – seangwright

相關問題