2015-12-21 17 views
37

Tôi đang sử dụng AngularJS 2 và Beta 0 Tôi đang cố gắng để tạo ra một RxJS Quan sát từ một sự kiện trên một đối tượng cửa sổ. Tôi tin rằng tôi biết công thức để chụp sự kiện này như một quan sát ở dịch vụ của tôi:Angular2 RxJS nhận được 'Observable_1.Observable.fromEvent không phải là một chức năng' lỗi

var observ = Observable.fromEvent(this.windowHandle, 'hashchange'); 

Vấn đề là mỗi khi tôi cố gắng chạy mã này, tôi nhận được một lỗi nói rằng 'fromEvent' không phải là một hàm.

Uncaught EXCEPTION: Error during evaluation of "click" 
ORIGINAL EXCEPTION: TypeError: Observable_1.Observable.fromEvent is not a function 

này dường như ngụ ý với tôi rằng tôi không xử lý import của tôi một cách chính xác bây giờ mà RxJS không được bao gồm trong việc xây dựng các kiễu góc 2, mặc dù phần còn lại của các chức năng ứng dụng của tôi đúng, mà đối với tôi có nghĩa là RxJS là nơi mà nó được cho là.

nhập của tôi trong dịch vụ trông như thế này:

import {Observable} from 'rxjs/Observable'; 

Mặc dù tôi cũng đã cố gắng sử dụng này để thay thế (với những thay đổi phù hợp với code), với kết quả tương tự:

import {FromEventObservable} from 'rxjs/observable/fromEvent'; 

tôi có cấu hình như sau trong index.html của tôi:

<script> 
    System.config({ 
     map: { 
      rxjs: 'node_modules/rxjs' 
     }, 
     packages: { 
      'app': {defaultExtension: 'js'}, 
      'rxjs': {defaultExtension: 'js'} 
     } 
    }); 
    System.import('app/app'); 
</script> 

ai đó có thể cho tôi biết những gì Tôi đang làm sai?

Trả lời

66

Vấn đề dường như là câu lệnh import sẽ trông như thế này:

import {Observable} from 'rxjs/Rx'; 

Lưu ý rằng Observable đã được đưa vào từ rxjs/Rx thay vì từ rxjs/Observable. As @EricMartinez mentions, kéo theo cách này sẽ giúp bạn có Automagically tất cả các nhà khai thác (như .map()).

+9

tại sao chúng ta thêm tất cả mọi thứ từ rxjs, có thể chúng ta không chỉ làm tăng thêm những phần cần thiết –

+0

@MahmoudHboubati có bạn có thể mang lại chỉ là bộ phận cần thiết. Xem câu trả lời bên dưới .. đó là cách thích hợp để nhập các thứ để bạn không làm nổi bật gói nội dung của mình. – SgtPooki

+2

sử dụng không được khuyến khích này .. bạn KHÔNG BAO GIỜ nên nhập TẤT CẢ các nhà khai thác (như vậy, không bao giờ dùng từ 'rxjs/RX' – Mackelito

76

của nó chắc chắn là không cần thiết phải nhập khẩu tất cả các nhà khai thác cùng một lúc! Bạn vừa nhập sai số fromEvent. Bạn có thể làm điều đó như thế này:

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

EDIT: Trong addititon với những gì tôi đã viết: cây lắc với AOT-Compiler của góc loại bỏ mã không sử dụng, dựa trên những gì bạn nhập. Nếu bạn chỉ cần nhập một số đối tượng hoặc hàm từ rxjs/rx, trình biên dịch không thể xóa bất kỳ thứ gì. Luôn nhập chỉ, những gì bạn cần!

+3

Lưu ý rằng bạn phải tận dụng các 'O' trong rxjs/quan sát được. tôi nhìn cho lỗi này mãi mãi. –

+2

Đây là câu trả lời tốt hơn. Nhập khẩu tất cả các rxjs chắc chắn sẽ làm chậm thời gian khởi động của bạn. – ccnokes

+0

này chắc chắn là giải pháp tốt hơn ngay cả khi @ của Michael_Oryl giải quyết nó. – seangwright

Các vấn đề liên quan