typescript - versiones - Angular2 http falta la función.map
install angular (2)
Querrá que su index.html se vea así, para que system.js pueda encontrar todas las dependencias de rxjs que importa en sus componentes.
<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>
Ahora puede usar esto en su archivo boot.ts:
import ''rxjs/add/operator/map'';
Esta pregunta ya tiene una respuesta aquí:
Encontré este código de ejemplo en un 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'')
);
}
Pero cuando trato de usarlo, solo obtengo TypeError: this.http.get(...).map is not a function in [null]
:
getChannels():Promise<Channel> {
return this.http.get(''...'')
.map(function (response:Response) {
...
}).toPromise();
}
Mi compilador de Typescript me dice que esos métodos están disponibles, pero al inspeccionar el valor de retorno de http.get()
faltan.
Utilicé el paquete.json de la guía de inicio actual de angualar2:
"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>
¿Alguna idea de lo que podría equivocarme en este momento?
Observable
por defecto viene con solo unos pocos operadores. Tienes que importarlos explícitamente:
import ''rxjs/add/operator/map'';
o, si no quieres pensar en eso, simplemente carga todo (en tu archivo bootstrap, por ejemplo):
import ''rxjs/Rx'';