urlaliasが利用可能かどうかを確認するためにWeb APIを呼び出しています。このタスクでは、私の非同期バリデーターでhttpserviceを使用しています。 バリデータが呼び出されると、正しいコードパスがすべて実行されます(すべてconsole.log()
が実行され、期待どおりに動作します)。約束を返すときにカスタム非同期検証が機能しない
検証からの約束がヌルか{ 'isUrlAliasActivityMainAvailable': true }
に戻るかどうかに関係なく、コントローラは常にエラーオブジェクトを次のように表示し、フォーム状態を無効にします。なぜ(bloody hell!)?
私が使用している:角度:2.1.0とrxjsを:5.0.0-beta.12
これは私のformbuilderです:
this.formBuilder.group({
//...
"urlAliasActivityMain":[null,[ ValidatorsZr.isUrlAliasActivityMainAvailableAsyncValidator(this.httpActivityService)]],
});
これは私のバリデータです。
public static isUrlAliasActivityMainAvailableAsyncValidator(httpActivityService: HttpActivityService) {
return function (control: FormControl): Promise<any> | Observable<any> {
const promise = new Promise<any>(
(resolve, reject) => {
httpActivityService.isUrlAliasActivityMainAvailable(control.value)
.subscribe(
(data: any) => {
console.log("isUrlAliasActivityMainAvailableAsyncValidator");
console.log(data);
if (data == false) {
console.log("data == false");
resolve({ 'isUrlAliasActivityMainAvailable': true });
}
else {
console.log("data == true");
resolve(null);
}
},
)
});
return promise;
}
}
OMGを!あなたの助けてくれてありがとう、あなたは素晴らしい時間を節約しました! – Luther
私はこの非常事のために約4時間を無駄にしました。 –
これは将来の爆笑を救った、私はそれを置いた場所だったことを知らずに、今一日それと戦っていた –