2016-10-28 4 views
0

私のコンポーネントのngOnInitの内側に、反応するフォームグループを定義します(別のフォームグループ内ですが、関連しません)。Ng2コンポーネントグローバル変数がリアクティブフォームコントローラ内で定義されていませんvalueChangesイベント

入力コントローラの1つで、変更が発生したときにそれに応じて行動したいので、valueChanges.subscribeを設定して、期待どおりに実行されます。

しかし、このイベントのコールバック内のコンポーネントグローバル変数には到達できません。

const company = this.formBuilder.group({ 
    name: ['', Validators.required] 
}); 

company.controls['name'].valueChanges.subscribe(value => { 
    //All `this` here are undefined 
    if (/\s/.test(value)) this.spaceEntered = true; 
    else if (value && value.replace(/\s/g, "").length > 0) 
     this.stringEntered = true; 
}); 

なぜこの問題が解決されますか?

答えて

0

私は恥じていますが、この状況はAngular 2とは関係ありませんが、JavaScriptがどのようなコンテキストであるかを忘れています。

export class ProductComponent implements OnInit { 

    companyFG: FormGroup; 
    spaceEntered: boolean; 
    stringEntered: boolean; 
    . 
    . 
    ngOnInit() { 
     this.companyFG = this.formBuilder.group({ 
      name: ['', Validators.required] 
     }); 
     . 
     . 
     this.companyFG.controls['name'].valueChanges.subscribe(value => this.filterCompany(value)); 
     . 
     . 
     . 
    } 

    filterCompany(term: string) { 
     if (/\s/.test(term)) this.spaceEntered = true; 
     else if (term && term.replace(/\s/g, "").length > 0) 
      this.stringEntered = true; 
    } 

} 

単にコンポーネントスコープの下で機能して修正この状況をイベントハンドラのコードを置きます

関連する問題