有人知道alpha 45和alpha 48之间的http是否有任何重大变化?我一直在寻找,我没有找到任何东西.我的问题是下面的代码在Alpha 45上完美运行.但是现在我已经升级到Alpha 48,_this.http.post(...).map is not a function
当我尝试运行应用程序时,我收到一条错误消息.奇怪的是,IntelliSense显示http.post正在返回一个可观察的.这意味着地图功能应该可用.任何帮助,将不胜感激.谢谢!
public Authenticate(username: string, password: string): Observable{ this.ResetAuthenticationValues(); return Observable.create((subscriber: EventEmitter ) => { let body: string = 'grant_type=password&username=' + username + '&password=' + password; let headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded'); this.http.post('http://example.com', body, {headers: headers}) .map(res => res.json()) .subscribe( (data: DataResponse) => { if (!data.error) { this.accessToken = {access_token: data.access_token, token_type: data.token_type}; subscriber.next(this.isAuthenticated = true); } else subscriber.error(this.isAuthenticated = false); }, (err) => subscriber.error(err), () => subscriber.complete() ); return () => { }; }); }
Eric Martine.. 31
另一个更新 (咳嗽,对不起,忘了这个选项)
如果您想避免单独添加运算符,可以通过执行来导入完整的Rx
import {Observable, Subject, ReplaySubject, etc...} from 'rxjs/Rx';
你将拥有所有的运营商:)
更新alpha 50(08/12/2015)
在alpha 49发布后不久,他们发布了alpha 50.这个版本将rxjs升级到了alpha 14.这样你就可以了
npm install angular2@latest
npm install rxjs@5.0.0-alpha.14
更新alpha 49(08/12/2015)
截至目前,alpha 49已经发布,并且没有改变,这意味着这将保持及时.原始答案仍然有效,只有一些更改,rjxs的路径已更改,因此它应如下所示:
System.config({
paths: {
'rxjs/add/observable/*' : 'node_modules/rxjs/add/observable/*.js',
'rxjs/add/operator/*' : 'node_modules/rxjs/add/operator/*.js',
'rxjs/*' : 'node_modules/rxjs/*.js'
}
});
import 'rxjs/add/operator/map';
注意
这个版本只需要alpha 13
版本,所以如果package.json
你已经有了另一个版本,你将不得不删除它,安装angular2,然后安装rjxs.
更新
该更新日志被更新,以显示这个重大更改.有一个从@jeffbcross评论的问题#5642来阐明这个问题很多.
引用该评论的一部分
模块化从一开始就是新RxJS项目的目标,直到最近我们才开始真正认真地组建运营商,而不是依赖于Rx的分层分布.
原始答案
关于RxJS和Angular2实际上有一个突破性的变化.所以现在使用像map
你一样的运算符来单独导入它们.您可以在此拉取请求中看到更改.你的问题已经存在问题了.
我建议你坚持使用alpha 47.但是对于每个需要并想知道解决方案是什么的人,比如在pull请求中指定,要单独添加运算符.
你必须有这样的东西
import {Http, ...} ...;
// Component
constructor(http: Http) {
http.get(...).map() // 'map' doesn't exist! Ouch!
}
要修复它,添加运算符(抱歉重复这么多次)并配置rxjs的路径
注意
这必须使用RxJS alpha 11或alpha 12(不要混淆它@reactivex/rxjs
,现在只是rxjs
).所以安装它
npm install rxjs@5.0.0-alpha.11
或者只是npm install rxjs
如果你想要最新的,尽管他们把它锁定为alpha 11.
配置System.config中的路径(请注意,这是我的配置,不一定是最好的,我假设你安装了alpha 11)
System.config({
paths: {
'rxjs/observable/*' : 'node_modules/rxjs/observable/*.js',
'rxjs/operators/*' : 'node_modules/rxjs/operators/*.js',
'rxjs/*' : 'node_modules/rxjs/*.js'
}
});
完成配置后,可以按如下方式导入运算符
import 'rxjs/operators/map';
就这样.每个操作员都必须这样做.所以我再说一遍,我建议你坚持使用alpha 47,就像我在评论中告诉你的那样.我将尝试稍后用plnkr更新答案.
另一个更新 (咳嗽,对不起,忘了这个选项)
如果您想避免单独添加运算符,可以通过执行来导入完整的Rx
import {Observable, Subject, ReplaySubject, etc...} from 'rxjs/Rx';
你将拥有所有的运营商:)
更新alpha 50(08/12/2015)
在alpha 49发布后不久,他们发布了alpha 50.这个版本将rxjs升级到了alpha 14.这样你就可以了
npm install angular2@latest
npm install rxjs@5.0.0-alpha.14
更新alpha 49(08/12/2015)
截至目前,alpha 49已经发布,并且没有改变,这意味着这将保持及时.原始答案仍然有效,只有一些更改,rjxs的路径已更改,因此它应如下所示:
System.config({
paths: {
'rxjs/add/observable/*' : 'node_modules/rxjs/add/observable/*.js',
'rxjs/add/operator/*' : 'node_modules/rxjs/add/operator/*.js',
'rxjs/*' : 'node_modules/rxjs/*.js'
}
});
import 'rxjs/add/operator/map';
注意
这个版本只需要alpha 13
版本,所以如果package.json
你已经有了另一个版本,你将不得不删除它,安装angular2,然后安装rjxs.
更新
该更新日志被更新,以显示这个重大更改.有一个从@jeffbcross评论的问题#5642来阐明这个问题很多.
引用该评论的一部分
模块化从一开始就是新RxJS项目的目标,直到最近我们才开始真正认真地组建运营商,而不是依赖于Rx的分层分布.
原始答案
关于RxJS和Angular2实际上有一个突破性的变化.所以现在使用像map
你一样的运算符来单独导入它们.您可以在此拉取请求中看到更改.你的问题已经存在问题了.
我建议你坚持使用alpha 47.但是对于每个需要并想知道解决方案是什么的人,比如在pull请求中指定,要单独添加运算符.
你必须有这样的东西
import {Http, ...} ...;
// Component
constructor(http: Http) {
http.get(...).map() // 'map' doesn't exist! Ouch!
}
要修复它,添加运算符(抱歉重复这么多次)并配置rxjs的路径
注意
这必须使用RxJS alpha 11或alpha 12(不要混淆它@reactivex/rxjs
,现在只是rxjs
).所以安装它
npm install rxjs@5.0.0-alpha.11
或者只是npm install rxjs
如果你想要最新的,尽管他们把它锁定为alpha 11.
配置System.config中的路径(请注意,这是我的配置,不一定是最好的,我假设你安装了alpha 11)
System.config({
paths: {
'rxjs/observable/*' : 'node_modules/rxjs/observable/*.js',
'rxjs/operators/*' : 'node_modules/rxjs/operators/*.js',
'rxjs/*' : 'node_modules/rxjs/*.js'
}
});
完成配置后,可以按如下方式导入运算符
import 'rxjs/operators/map';
就这样.每个操作员都必须这样做.所以我再说一遍,我建议你坚持使用alpha 47,就像我在评论中告诉你的那样.我将尝试稍后用plnkr更新答案.
如果您想使用Angular 2的Beta版本或未来的实际版本,那么您需要做两件事才能使其工作.
1)您首先需要更新index.html中的System.config()配置以包含对RxJS的引用:
System.config({ map: { 'rxjs': 'node_modules/rxjs' }, packages: { 'app': {defaultExtension: 'js'}, // assumes your code sites in `src/app` 'rxjs': {defaultExtension: 'js'} } }); System.import('app/app'); // this assumes your main file is `app.ts` and it sits in the `app` folder.
2)然后你可以map()
使用import
主文件中的行导入和其他(或所有)RxJS操作符到你的应用程序中(在我的例子中是app.ts):
import 'rxjs/Rx'; // this would import all RxJS operators
如果您只是map()
为了保持大小而导入,那么您可以这样做:
import 'rxjs/add/operator/map';
你并不需要这些文件导入到每个类文件.只需将它们导入主文件,即可访问所有其他组件/服务/指令.
您需要在组件中导入Rx贴图运算符
import 'rxjs/add/operator/map';
干杯!