2017-05-30 6 views
0

シンプルなフォームバリデーター関数があります。フォームバリデーター関数からのシングルトンサービスへのアクセス

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

はLocaleServiceの「@ Injectable」ですか? –

+0

はい、@注射可能です。 –

答えて

0

ここに解決策があります。プロバイダーとしてのシングルトンサービスは、[providers]部分にのみ、app.module.tsで定義する必要があります。私の間違いは、それを私のAppComponentにも追加することでした。そのため、DIはサービスで新しいインスタンスを作成しましたが、子コンポーネントでは作成しませんでした。

関連する問題