シンプルなフォームバリデーター関数があります。フォームバリデーター関数からのシングルトンサービスへのアクセス
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
のインスタンスを作成しようとしましたが、それはそれを許可していません。また、パラメータとして渡すことも、グローバル変数から取得することもできません。それは常に誤りです。
どうすればこの機能をサービスと話すことができますか?
はLocaleServiceの「@ Injectable」ですか? –
はい、@注射可能です。 –