2017-10-13 85 views
0

我有一個angular2應用程序,它使用systemjs來映射/加載。未處理的Promise拒絕:Rx_1.Subject不是構造函數;區域:;任務:Promise.then;值:TypeError:Rx_1.Subject不是構造函數

導入該項目的rxjs,並引用它是好的,但是當代碼部署,它未能建立與消息的主題變量:

"Unhandled Promise rejection: Rx_1.Subject is not a constructor ; Zone: ; Task: Promise.then ; Value: TypeError: Rx_1.Subject is not a constructor".

RX位於systemjs:

(function (global) { 
var map = { 
    'app': 'app', 
    '@angular': 'js/@angular', 
    // other libraries 
    'rxjs': 'js/rxjs', 
}; 

// packages tells the System loader which filename and/or extensions to look for by default (when none are specified) 
var packages = { 
    'app': { main: 'main.js', defaultExtension: 'js' }, 
    'rxjs': { defaultExtension: 'js' } 
}; 

的方式我很實例主題:

import { Injectable } from '@angular/core'; 
import { Subject } from "rxjs/Rx"; 

@Injectable() 
export class MyService { 

constructor(private http: Http) { 
    let b = new Subject<string>(); // exteption HERE 
    let m = b.asObservable(); 
    b.next("k"); 

所有rxjs的裝載罰款瀏覽器。


UPDATE:看看這個多,如果我在我的角度服務導入的Rx爲:

import * as Rx from 'rxjs/Rx'; 

,比檢查控制檯中的Rx對象,它只是有一個默認值, __useDefault屬性獲得者。 其他一切,可觀察,主題都可以通過它們訪問。

喜歡做:

var observable = Rx.Observable.create(function (observer) { 
     observer.next(1); 
    }); 

回來的:

VM1083:1 Uncaught TypeError: Cannot read property 'create' of undefined

然而,當然:

var observable = Rx.default.Observable.create(function (observer) { 
     observer.next(1); 
    }); 

工作正常。

我的項目是打字稿,我試過了目標編輯es5和es6。

+0

在哪一行是異常? –

+0

試圖實例化Subject或Observable,一直在玩註釋之一等 – amy8374

+1

檢查「'rxjs':'js/rxjs'是什麼,並嘗試從'rxjs/Subject'中導入它。 – martin

回答

2

這是一個例子,如何主題被實例化

@Injectable() 
export class MyService { 

    public invokeEvent:Subject<any> = new Subject(); 

    constructor() {} 
} 

關於觀測量,這是一個偉大的書約Using Observables

+0

對,那是爲我吹的那條線;是否將它放在構造函數之外,完全如您所願,或者在構造函數中。 – amy8374

+0

它是內聯構造的,爲什麼你需要將它添加到構造函數中? –

+0

即使我構建它內聯,我仍然得到相同的構造函數異常。 – amy8374