バリデーション - Angular 4 バリデーターによってエラー "errors : {__zone_symbol__state: null, __zone_symbol__value: Array(0)}" を設定
Mobile mobileNumberValidatorは正常に動作しますが、他の二つのバリデーターはエラー時にnullのプロミスを返します。ここで自分が犯したミスが特定できません。助けてください。その二つのバリデーターはFormBuilderオブジェクトに次のようにエラーを設定します
エラー : {__zone_symbol__state: null, __zone_symbol__value: Array(0)}
フォームビルダーグループ内
this.empInfoForm = this.fb.group({
'Mobile': [null, [Validators.required], [this.mobileNumberValidator.bind(this)]],
'Private': [null, [this.privateNumberValidator.bind(this)]],
'Work': [null, [this.workNumberValidator.bind(this)]],
});
バリデータメソッド
mobileNumberValidator(control: AbstractControl) {
return new Promise(resolve => {
setTimeout(() => {
if (!this.isMobileNumberValid) {
resolve({
'phoneNumber': true
})
console.log(this.empInfoForm)
} else {
resolve(null);
}
}, 10);
})
}
workNumberValidator(control: AbstractControl) {
return new Promise(resolve => {
setTimeout(() => {
if (!this.isWorkNumberValid) {
resolve({
'phoneNumber': true
})
console.log(this.empInfoForm)
} else {
resolve(null);
}
}, 10);
})
}
privateNumberValidator(control: AbstractControl) {
return new Promise(resolve => {
setTimeout(() => {
if (!this.isPrivateNumberValid) {
resolve({
'phoneNumber': true
})
console.log(this.empInfoForm)
} else {
resolve(null);
}
}, 10);
})
}
回答 #1
ここで自分がしたミスを見つけました。カスタムバリデータのバインディングは、ここでは3番目のパラメータであるべきです。
this.empInfoForm = this.fb.group({
'Mobile': [null, [Validators.required], [this.mobileNumberValidator.bind(this)]],
'Private': [null,null,[this.privateNumberValidator.bind(this)]],
'Work': [null,null,[this.workNumberValidator.bind(this)]],
});
回答 #2
In IONIC
if you facing issue in IONIC
error :- __zone_symbol__state: null, __zone_symbol__value: Array(0)
======================== Sol
// use platform ready function, its must
this.platform.ready().then(() => {
// use promise like syntax not like this.appVersion.getVersionNumber()
this.appVersion.getVersionNumber().then((data) => {
})
})
