我有一个angular2应用程序,它使用systemjs来映射/加载。
在项目中导入rxjs并引用它很好,但是当部署代码时,它无法使用消息构造Subject变量:
“未处理的承诺拒绝:Rx_1.Subject不是构造函数; 区域:;任务:Promise.then;值:TypeError:Rx_1。主题是 不是构造函数“。
关于systemjs的Rx:
(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都在浏览器中正常加载。
更新:更多信息,如果我在我的角度服务中导入Rx:
import * as Rx from 'rxjs/Rx';
并检查控制台中的Rx对象,它只有一个默认的__useDefault属性getter。 其他所有东西,Observable,Subject都可以通过它们访问。
喜欢这样做:
var observable = Rx.Observable.create(function (observer) {
observer.next(1);
});
回来了:
VM1083:1未捕获的TypeError:无法读取未定义的属性“create”
然而,当然:
var observable = Rx.default.Observable.create(function (observer) {
observer.next(1);
});
工作正常。
我的项目是打字稿,我尝试过目标编译es5和es6。
答案 0 :(得分:4)
我之前是从'rxjs / Subject'导入'import {Subject}的。 从'rxjs'更改为'import {Subject}。 这为我解决了这个问题。
答案 1 :(得分:2)
答案 2 :(得分:0)
在查看How to import `Observable` from `Rx` (not angular)
后,我设法取消阻止我将tsconfig.json模块从“system”更改为“commonjs”,并且正在编译Rx lib文件而没有getter。