【问题标题】:Angular 2 TypeScript Error: Can't resolve all parameters for ProductsServiceAngular 2 TypeScript 错误:无法解析 ProductsService 的所有参数
【发布时间】:2017-06-17 10:26:30
【问题描述】:

我收到以下信息:“错误:无法解析 ProductsService 的所有参数”。

参考:http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-data-binding

product.model.ts

export class Product {
constructor(
    public ProductID?: number,
    public ProductName?: string,
    public UnitPrice?: number,
    public UnitsInStock?: number,
    public Discontinued?: boolean
) { } }

products.service.ts

import { Injectable } from '@angular/core';
import { Jsonp, JsonpModule } from '@angular/http';
import { Product } from './product.model';
import { Observable } from 'rxjs/Rx';

@Injectable()

// See: http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-data-binding

export class ProductsService {
    constructor( private jsonp: Jsonp) { }

    fetchData(action: string = "", data?: Product): Observable<Product[]>{
        console.log("BGW Action: " + action);
        console.log("BGW this.serializeModels(data) = " + this.serializeModels(data));
        return this.jsonp.get(`http://demos.telerik.com/kendo-ui/service/Products/${action}?callback=JSONP_CALLBACK${this.serializeModels(data)}`).map(response => response.json())
    }

    private serializeModels(data?: Product): string {
        return data ? `&models=${JSON.stringify([data])}` : '';
    }
}

app.component.ts

包含:

import { ProductsService } from './products.service';
import { Product } from './product.model';
import { Inject } from '@angular/core';

还有:

providers: [ProductsService],

还有:

public productsData: Array<Product> = [];
// public listItems: Array<string> = [];

还有:

//constructor (@Inject(ProductsService) private productService: ProductsService) { }
constructor (private productService: ProductsService) { }

ngOnInit() {
  this.productService.fetchData().subscribe(
    (data) => this.productsData = data
  )
}

非常感谢任何想法。

问候,

【问题讨论】:

  • 你的 fetchData 接受两个参数,actiondata,但是在你调用方法的地方,你没有传递任何参数...
  • 你在 app.module 中注册了JsonpModule 吗?

标签: angular typescript kendo-ui kendo-ui-angular2


【解决方案1】:

为了解决这个问题,我在 app.component.ts 中进行了更改:

constructor (private productsService: ProductsService) { }

constructor (@Inject(ProductsService) private productsService: ProductsService) { }

product.service.ts 中,更改:

constructor( private jsonp: Jsonp) { }

到:

constructor(@Inject(Jsonp) private jsonp: Jsonp) { }

【讨论】:

  • 谢谢!在constructor 中使用@Inject(...) 解决了无法将anything 注入HttpInterceptor 的错误
  • 原来我的export class AuthService extends HttpInterceptor { // ... code } 上缺少@Injectable() 装饰器,正如stackoverflow.com/questions/39847356/… 上解决的那样
猜你喜欢
  • 2016-11-08
  • 2016-07-29
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多