2016-10-04 9 views
0

特定のFormControlに対して独自の検証を作成していますが、検証関数外で定義された外部値への参照を作成する方法がわかりません。Angular2 - フォームカスタム検証 - 検証関数外の参照を作成する

CODE:

@Component({ 
     selector: 'city-autocomplete', 
     template: ` 
    <label for="incidade">Cidade/Comarca:</label> 
    <input type="text" class="autocomplete-imput" id="incidade" 
     [formControl]=inputcidade 
     > 
    `, 
     styleUrls: ['./city-autocomplete.component.scss'] 
    }) 

    export class CityAutocompleteComponent { 

    extenalValue :boolean = false 



    inputcity = new FormControl('', [this.cityValidator]); 

    //My Validator: 
     cityValidator(ctrl: AbstractControl) { 

     const isValid = this.extenalValue // <== this is UNDEFINED 

     return isValid ? null : { 
      cityValidator: { 
      valid: false 
      } 
     } 
     } 
    } 

HTML:

ERROR:

にですextenalValueが未定義であることを示しています。

私が見ることができたように、抽象的なコントロールはBEFORE @Componentを実行するので、バリデータ関数の外側には何も定義できません。

私の質問:

がどのように私は、この関数外の値への参照を作成する必要がありますか?

ありがとうございました。

答えて

1

関数参照を使用する場合、コンポーネントクラスへの参照バインディングはなくなりました。

あり、この問題を解決するための様々な方法は、一つの選択肢は次のとおりです。

inputcity = new FormControl('', [this.cityValidator.bind(this)]); 

少しサイドノート。コンポーネント内で実行するバリデータ関数は何ですか?

+0

ありがとう、私はそれをやろうとします。 コンポーネント内でこの検証関数を作ったのは、2行か3行しかコードではなく、ここでのみ使われるからです。 私は、新しいディレクティブ/エクスポート関数を使ってアプリケーションに別のファイルを作成し、これをそのままバレル(index.ts)とモジュールの中に挿入する価値はないと考えました。 –