我在tutorial:
中找到了此示例代码getRandomQuote() {
this.http.get('http://localhost:3001/api/random-quote')
.map(res => res.text())
.subscribe(
data => this.randomQuote = data,
err => this.logError(err),
() => console.log('Random Quote Complete')
);
}
但是在尝试使用它时,我只得到TypeError: this.http.get(...).map is not a function in [null]
:
getChannels():Promise<Channel> {
return this.http.get('...')
.map(function (response:Response) {
...
}).toPromise();
}
我的Typescript编译器告诉我这些方法是可用的,但在检查http.get()
的返回值时,它们会丢失。
我使用了当前angualar2入门指南的package.json:
"dependencies": {
"angular2": "2.0.0-beta.0",
"systemjs": "0.19.6",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.3",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.0",
"zone.js": "0.5.10"
},
...
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>
在这一点上我有什么想法可能会出错?
答案 0 :(得分:31)
Observable
只有几个运算符。您必须明确导入它们:
import 'rxjs/add/operator/map';
或者,如果您不想考虑它,只需加载所有内容(例如,在您的引导程序文件中):
import 'rxjs/Rx';
答案 1 :(得分:9)
您希望index.html看起来像这样,因此system.js可以找到您在组件中导入的所有rxjs依赖项。
<script src="/lib/anguar2/angular2-polyfills.js"></script>
<script src="/lib/es6-shim/es6-shim.js"></script>
<script src="/lib/systemjs/system.src.js"></script>
<script>
System.config({
defaultJSExtensions: true,
packages: {
app: {
format: 'register'
}
},
map: {
'rxjs':"lib/rxjs"
}
});
</script>
<script src="/lib/anguar2/angular2.dev.js"></script>
<script src="/lib/anguar2/router.dev.js"></script>
<script src="/lib/anguar2/http.js"></script>
<script>
System.import('app/boot');
</script>
现在您可以在boot.ts文件中使用它:
import 'rxjs/add/operator/map';