Angular 2 HTTP Request: TypeError: backend.createConnection is not a function
Angular 2 HTTP Request: TypeError: backend.createConnection is not a function
我正在尝试 运行 一个简单的 HTTP 请求 Angular 并且 运行 遇到以下错误:
angular2.dev.js:23941 Error: Uncaught (in promise): EXCEPTION: Error during instantiation of AlbumListComponent!.
ORIGINAL EXCEPTION: TypeError: backend.createConnection is not a function
为了简化,我将 HTTP 功能分解为最简单的删除服务并直接访问 HTTP 服务和 Observable:
import {Component} from 'angular2/core';
import {Album} from './album';
import {AppState} from './appstate';
import {Observable} from 'rxjs/Observable';
import {Http} from 'angular2/http';
@Component({
selector: 'album-list',
templateUrl: 'Views/albumList.html',
providers: [AlbumService, Http, Response]
})
export class AlbumListComponent {
albums: Array<Album> = [];
title: string = "Album Listing";
errorMessage: string;
constructor(public state: AppState,
public albumService: AlbumService,
public http: Http) {
console.log('AlbumList Constructor' + this.title);
state.activeTab = "albums";
debugger;
http.get(state.urls.albums)
.map(res => {
debugger;
return res.json()
})
//.catch(error => {
// debugger;
// console.error(error);
// return Observable.throw(error.json().error || 'Server error');
//})
.subscribe(albums => this.albums = albums)
//this.getAlbums(); // service removed to simplify
}
}
Bootstrap 代码(并且 http.dev.js 包含在脚本列表中):
import {bootstrap} from 'angular2/platform/browser';
import {Albumviewer} from './albumviewer.component';
import {ROUTER_PROVIDERS} from 'angular2/router';
import {HTTP_PROVIDERS} from 'angular2/http';
import {AppState} from './appstate'
import 'rxjs/Rx';
bootstrap(Albumviewer,[
ROUTER_PROVIDERS,
HTTP_PROVIDERS,
]);
我要么收到描述的错误,要么收到有关缺少提供程序(如 ConnectionBackend)的错误。
如果我删除 Http 访问代码,应用 运行 就可以了。有了里面的代码,它就会爆炸。我不知道在此处查看什么 - 因为错误消息清楚地指向 HTTP 服务使用的子组件。
更新
在 Angular2 中,最终将 HttpModule
添加到 @NgModule()
的导入中也是如此
原创
你没有显示你的 bootstrap(...)
但它可能不包含 HTTP_PROVIDERS
bootstrap(AppComponent, [HTTP_PROVIDERS]);
HTTP_PROVIDERS
包含 Http
及其所有依赖项。如果将 HTTP_PROVIDERS
添加到 bootstrap()
,则无需将 Http
添加到组件上的提供程序,因为这样它就可以在全球范围内使用。
如果你想注入它,你仍然需要导入它。
刚在 RC5 中遇到这个问题,我的情况要解决:
在组件中(其中 {ServiceName}
是 HTTP 服务的名称):
// import HTTP_PROVIDERS at the top:
import { HTTP_PROVIDERS } from '@angular/http';
// in the @Component decorator
providers: [ {ServiceName}, HTTP_PROVIDERS ]
在app.module.ts中:
// import ConnectionBackend and HTTP_PROVIDERS
import { ConnectionBackend, HTTP_PROVIDERS } from '@angular/http';
// in the @NgModule decorator
providers: [
ConnectionBackend,
HTTP_PROVIDERS,
...
]
希望这可以帮助任何人在 RC5 中解决这个问题
HTTP_PROVIDERS 已从 2.0 中弃用。
您可以改用这样的东西:
import { HttpModule } from '@angular/http';
import { BrowserModule } from '@angular/platform-browser';
在你的装饰器中:
imports:[ BrowserModule, HttpModule ]
注意:确保从提供程序
中删除Http
我正在尝试 运行 一个简单的 HTTP 请求 Angular 并且 运行 遇到以下错误:
angular2.dev.js:23941 Error: Uncaught (in promise): EXCEPTION: Error during instantiation of AlbumListComponent!. ORIGINAL EXCEPTION: TypeError: backend.createConnection is not a function
为了简化,我将 HTTP 功能分解为最简单的删除服务并直接访问 HTTP 服务和 Observable:
import {Component} from 'angular2/core';
import {Album} from './album';
import {AppState} from './appstate';
import {Observable} from 'rxjs/Observable';
import {Http} from 'angular2/http';
@Component({
selector: 'album-list',
templateUrl: 'Views/albumList.html',
providers: [AlbumService, Http, Response]
})
export class AlbumListComponent {
albums: Array<Album> = [];
title: string = "Album Listing";
errorMessage: string;
constructor(public state: AppState,
public albumService: AlbumService,
public http: Http) {
console.log('AlbumList Constructor' + this.title);
state.activeTab = "albums";
debugger;
http.get(state.urls.albums)
.map(res => {
debugger;
return res.json()
})
//.catch(error => {
// debugger;
// console.error(error);
// return Observable.throw(error.json().error || 'Server error');
//})
.subscribe(albums => this.albums = albums)
//this.getAlbums(); // service removed to simplify
}
}
Bootstrap 代码(并且 http.dev.js 包含在脚本列表中):
import {bootstrap} from 'angular2/platform/browser';
import {Albumviewer} from './albumviewer.component';
import {ROUTER_PROVIDERS} from 'angular2/router';
import {HTTP_PROVIDERS} from 'angular2/http';
import {AppState} from './appstate'
import 'rxjs/Rx';
bootstrap(Albumviewer,[
ROUTER_PROVIDERS,
HTTP_PROVIDERS,
]);
我要么收到描述的错误,要么收到有关缺少提供程序(如 ConnectionBackend)的错误。
如果我删除 Http 访问代码,应用 运行 就可以了。有了里面的代码,它就会爆炸。我不知道在此处查看什么 - 因为错误消息清楚地指向 HTTP 服务使用的子组件。
更新
在 Angular2 中,最终将 HttpModule
添加到 @NgModule()
的导入中也是如此
原创
你没有显示你的 bootstrap(...)
但它可能不包含 HTTP_PROVIDERS
bootstrap(AppComponent, [HTTP_PROVIDERS]);
HTTP_PROVIDERS
包含 Http
及其所有依赖项。如果将 HTTP_PROVIDERS
添加到 bootstrap()
,则无需将 Http
添加到组件上的提供程序,因为这样它就可以在全球范围内使用。
如果你想注入它,你仍然需要导入它。
刚在 RC5 中遇到这个问题,我的情况要解决:
在组件中(其中 {ServiceName}
是 HTTP 服务的名称):
// import HTTP_PROVIDERS at the top:
import { HTTP_PROVIDERS } from '@angular/http';
// in the @Component decorator
providers: [ {ServiceName}, HTTP_PROVIDERS ]
在app.module.ts中:
// import ConnectionBackend and HTTP_PROVIDERS
import { ConnectionBackend, HTTP_PROVIDERS } from '@angular/http';
// in the @NgModule decorator
providers: [
ConnectionBackend,
HTTP_PROVIDERS,
...
]
希望这可以帮助任何人在 RC5 中解决这个问题
HTTP_PROVIDERS 已从 2.0 中弃用。
您可以改用这样的东西:
import { HttpModule } from '@angular/http';
import { BrowserModule } from '@angular/platform-browser';
在你的装饰器中:
imports:[ BrowserModule, HttpModule ]
注意:确保从提供程序
中删除Http