我想覆盖其他模块的服务,但我收到错误“不是函数”
在我的组件(模块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;
}
}
我想我需要你的帮助!谢谢!
答案 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 }