升级到 ng2 final (2.0.0) 后,我收到此错误:
MyComponent_Host - 内联模板:0:0 原因:没有 ConnectionBackend 的提供者!
此处和此处的当前解决方案建议在 bootstrap() 中传递 HTTP_PROVIDERS,这在最终版本中似乎已弃用。
我在主模块中导入 HttpModule,如下所示:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AgGridModule } from 'ag-grid-ng2/main';
import { HttpModule } from '@angular/http';
import { ProductListComponent } from './productlist.component';
@NgModule({
imports: [BrowserModule
, AgGridModule.forRoot()
, HttpModule
],
declarations: [ProductListComponent],
bootstrap: [ProductListComponent]
})
export class ProductModule { }
我的引导程序如下所示:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { ProductModule } from './product/product.module';
import { ProductService } from './product/product.service';
import {AgGridNg2} from 'ag-grid-ng2/main';
const platform = platformBrowserDynamic();
platform.bootstrapModule(ProductModule);
我正在使用 Http 服务的服务;产品.service.ts:
import { Injectable } from '@angular/core';
import { Http, Response, URLSearchParams } from '@angular/http';
@Injectable()
export class ProductService {
constructor (private http: Http){}
productlist.component.ts
import { Component } from '@angular/core';
import { OnInit } from '@angular/core';
import { ProductService } from './product.service';
import { Http, HttpModule } from '@angular/http';
import { AgGridNg2 } from 'ag-grid-ng2/main';
import { GridOptions } from 'ag-grid/main';
@Component({
selector: 'product-list',
templateUrl: './app/product/productlist.html',
})
export class ProductListComponent implements OnInit {
Products: Array<any>;
searchTerm = new FormControl();
constructor(private svc: ProductService) {...}
包.json
{
"name": "productv2",
"version": "1.0.0",
"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
"lite": "lite-server",
"postinstall": "typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings"
},
"license": "ISC",
"dependencies": {
"ag-grid": "~6.0.1",
"ag-grid-enterprise": "~6.0.1",
"ag-grid-ng2": "~6.0.4",
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/core": "2.0.0",
"@angular/forms": "2.0.0",
"@angular/http": "2.0.0",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/router": "3.0.0",
"@angular/upgrade": "2.0.0",
"core-js": "^2.4.1",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.12",
"systemjs": "0.19.27",
"zone.js": "^0.6.23",
"angular2-in-memory-web-api": "0.0.20",
"bootstrap": "^3.3.6",
"ag-grid": "6.0.x",
"ag-grid-ng2": "6.0.x",
"jquery": "3.1.0"
},
"devDependencies": {
"concurrently": "^2.2.0",
"lite-server": "^2.2.2",
"typescript": "^2.0.2",
"typings":"^1.3.2"
}
}
更新/解决
看起来问题是过时的代码,可能是由于 TypeScript 编译器 (tsc) 无法正常工作。即使我进行了重大更改(即将应用程序指向一个新模块,但我仍然看到旧模块的错误),我仍然会看到旧错误。此外,当我手动删除 .js 文件时,我没有看到它们重新编译,并且必须跳过箍才能将它们取回。仍然在这里找到最好的方法。
...
自从升级到最终版本后,我就被各种奇怪的问题轰炸了。现在我被卡住了,无法注入一个简单的服务。
“无法解析 MyComponent 的所有参数”。
我添加了一个不依赖于它自己的 DummyService,并且我遵循了我能找到的每个示例。使用构造函数注入器并在组件提供程序数组中定义了我的服务,还尝试将其添加到模块提供程序中。我下载了最新版本的英雄之旅示例,并在该演示中做与 HeroService 相同的事情。到现在为止都输了一天。奇怪的是,我在 RC 中没有这些问题。
产品组件
import { Component } from '@angular/core';
import { DummyService } from './dummy.service';
@Component({
selector: 'products',
templateUrl: './app/product/products.html',
providers: [ DummyService ]
})
export class ProductsComponent {
Products: Array<any>;
constructor(private svc: DummyService) {}
虚拟服务
import { Injectable } from '@angular/core';
@Injectable()
export class DummyService {...}
我创建了一个 plunker 并且第一次尝试注入工作..所以我的设置有什么不同?!
http://plnkr.co/edit/MdMNuSVmcVqvo0Zyu4Ca?p=preview
我现在已将 plunker 中的每个文件复制/粘贴到我的本地版本中,但仍然看到错误。当我注释掉构造函数时,错误消失了。