我有一个服务,它有两个简单Date
类型的成员变量。例如:
export class SampleService {
constructor(
private _fromDate: Date,
private _toDate: Date
) { }
}
由于Date
是原始的,而不是Angular的已知类型。我在我的模块@NgModule
装饰中为它提供了默认值。例如:
providers:[{provide:Date, useValue: new Date()}]
我的应用程序运行正常,包括单元测试以及使用ng build
构建。但是,使用--prod
标志时出现以下错误,我的生产失败:
Can't resolve all parameters for SampleService in src/SampleService.ts: (?,?)
这里有点混淆这种行为。 提前谢谢。
答案 0 :(得分:1)
开发人员收到Can't resolve all parameters
错误的典型原因是,要么不将服务注册为提供者,要么使用Angular在浏览器中运行后无法使用的某种类型(特别是在执行之后) AOT汇编)。
为了解决第二个问题,Angular有一个creating special tokens to use的概念,而不是在依赖注入的东西中使用类型。如果遵循引用的Angular文档中的说明,则在这种情况下将执行以下操作。
创建并使用InjectionToken
import { Inject, Injectable, InjectionToken} from '@angular/core';
export const DATE_TOKEN = new InjectionToken<Date>('date');
@Injectable()
export class SampleService {
constructor(
private @Inject(DATE_TOKEN) _fromDate: Date,
private @Inject(DATE_TOKEN) _toDate: Date
) {}
}
提供令牌和服务
import { NgModule } from '@angular/core';
import { SampleService, DATE_TOKEN } from './sample.service.ts';
@NgModule({
...
providers: [
...
{ provide: DATE_TOKEN, useValue: new Date() },
SampleService
]
})
export class SampleModule {
}