在Angular5中提供服务=“不是函数”

时间:2018-03-29 05:50:11

标签: angular angular5 ngx-charts

我想覆盖其他模块的服务,但我收到错误“不是函数”

在我的组件(模块1)中,我注入了服务

dependencies {
    compile 'com.github.florent37:android-slidr:1.0.4'
}

在模块2中,我覆盖提供者中的servive

public constructor(private chartProgressService: ChartProgressService) {
}

这是MyChartProgressService

providers: [
    {
        provide: Configuration,
        useClass: AppConfiguration,
    },
    {
        provide: ChartProgressService,
        useValue: MyChartProgressService
    },
    {
        provide: LOCALE_ID,
        useValue: 'de-DE',
    }
],

在我的组件中调用this.chartProgressService.getValue()会返回错误

import {Injectable} from '@angular/core';

@Injectable()
export class InnogyChartProgressService {

    public getUnit(): string {
        return '';
    }

    public getValue(currentValue: number, maxValue: number): number {
        return currentValue;
    }
}

我想我需要你的帮助!谢谢!

3 个答案:

答案 0 :(得分:1)

如果你想使用InnogyChartProgressService

,还有一件事
import {Injectable} from '@angular/core';

@Injectable()
export class InnogyChartProgressService {
}

然后它应该像

 
 {
    provide: ChartProgressService,
    useClass: InnogyChartProgressService 
},

在您的情况下,您指的是名为MyChartProgressService的不同类并更改useClass

根据角度指南,如果您想要使用新服务替换服务而不是扩展服务,例如角度指南中给出

要执行此操作,请用新的Logger替换旧的Logger

[{ provide: Logger, useClass: BetterLogger }]

它在新的一个中扩展旧的

@Injectable()
export class EvenBetterLogger extends Logger {
}

阅读:https://angular.io/guide/dependency-injection#alternative-class-providers

答案 1 :(得分:0)

问题实际上如下:如果在提供程序定义中使用IF sum(1) = sum(2) THEN IF sum(2) = sum(3) THEN IF sum(3) = sum2(1) THEN IF sum2(1) = sum2(2) THEN IF sum2(2) = sum2(3) THEN IF sum2(3) = sum3 THEN IF sum3 = sum4 THEN PRINT "This is a Lo Shu Square, with all sums equaling"; sum(1) ELSE PRINT "This is not a Lo Shu Square." END IF END IF END IF END IF END IF END IF END IF END ,则必须使用useValue或对象文字等实际实例。但是,如果您只想提供一个“蓝图”并让它由Angular自动实例化,请使用new MyChartProgressService()类型,因此在您的情况下useClass

可在此question中找到更多解释。

答案 2 :(得分:-1)

{    提供:ChartProgressService,     useClass :MyChartProgressService }