2017-10-13 4 views
0

J'ai une application angular2, qui utilise systemjs pour mapper/charger.Non pris en compte Rejet de la promesse: Rx_1.Subject n'est pas un constructeur; Zone:; Tâche: Promise.then; Valeur: TypeError: Rx_1.Subject n'est pas un constructeur

Importation des rxjs dans le projet, et le référencement, il est très bien, mais quand le code est déployé, il ne parvient pas à construire une variable Sujet avec le message:

"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' } 
}; 

la façon dont je suis l'instanciation le sujet:

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"); 

tous rxjs est chargé bien dans le navigateur.


MISE À JOUR: En regardant ce plus, si j'importer Rx dans mon service angulaire:

import * as Rx from 'rxjs/Rx'; 

et que inspecter l'objet Rx dans la console, il a juste un défaut, et Renvoie la propriété __useDefault. Tout le reste, observable, le sujet est accessible à travers eux.

Comme faire:

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

ramène un:

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

alors que, bien sûr:

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

fonctionne très bien.

Mon projet est en tapuscrit, j'ai essayé la compilation cible es5 et es6.

+0

Sur quelle ligne l'exception? –

+0

en essayant d'instancier le sujet ou l'observable, en jouant avec en commentant un etc. – amy8374

+1

Vérifiez ce que '' rxjs ':' js/rxjs 'est et essayez d'importer depuis 'rxjs/Subject'. – martin

Répondre

2

Voici un exemple comment sujet est instancié

@Injectable() 
export class MyService { 

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

    constructor() {} 
} 

A propos de ce Observables est un grand livre sur Using Observables.

+0

Bien, c'est la ligne qui souffle pour moi; si je le mets en dehors du constructeur, exactement comme vous l'avez, ou dans le constructeur. – amy8374

+0

Il est construit en ligne pourquoi avez-vous besoin d'ajouter cela au constructeur? –

+0

même si je le construis en ligne, j'ai toujours la même exception de constructeur. – amy8374