从表单验证器函数访问单例服务

时间:2017-05-30 00:52:26

标签: angular

我有一个简单的表单验证器功能。

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的实例,但它不允许这样做。它也不允许将其作为参数传递或从全局变量中获取。这总是一个错误。

那么我怎样才能让这个功能与服务对话?

1 个答案:

答案 0 :(得分:0)

这是解决方案。作为提供者的单件服务只应在[providers]的{​​{1}}部分中定义。我的错误是将它也添加到我的app.module.ts,这导致DI在服务中创建新实例,但不在子组件中创建。