我有一个简单的表单验证器功能。
static required(control: FormControl) {
if (control.value == null || control.value.length <= 0)
return {'required': false, 'errorMsg': 'Value is required'}
return null
}
我想更改它,因此它不会返回硬编码的errorMsg
,而是返回本地化的消息。问题是它拒绝使用我称为LocaleService
的本地化服务。
该服务有一个名为locale
的道具。它是一个包含所有本地化消息的JSON对象。在组件中它很容易使用:我只是在构造函数中创建一个私有实例,然后它就可以访问了。
但验证器类不希望这样。首先,如果我尝试这样做:
import {LocaleService} from '../services/locale.service';
export class FormValidators {
constructor(private _localeService: LocaleService) {}
static required(control: FormControl) {
if (control.value == null || control.value.length <= 0)
return {'required': false, 'errorMsg': 'Value required'}
return null
}
}
整个事情立即中断,甚至不会建立。错误消息是:
Uncaught Error: Can't resolve all parameters for FormValidators: (?).
我尝试在静态函数中创建LocaleService
的实例,但它不允许这样做。它也不允许将其作为参数传递或从全局变量中获取。这总是一个错误。
那么我怎样才能让这个功能与服务对话?
答案 0 :(得分:0)
这是解决方案。作为提供者的单件服务只应在[providers]
的{{1}}部分中定义。我的错误是将它也添加到我的app.module.ts
,这导致DI在服务中创建新实例,但不在子组件中创建。