异步验证器永远不会解析为true

时间:2016-07-11 13:25:08

标签: angular angular2-forms

我创建了以下验证功能:

passwordValid(control:Control):{ [key: string]: any; } {
    clearTimeout(this.timer);
    if (control.value){
        let q = new Promise((resolve) => {
            this.timer = setTimeout(()=>{
                this._http.post('/check', control.value)
                    .subscribe(
                        success=>{
                            resolve(null);
                        },
                        error=>{
                            resolve({'invalid': true});
                        })
            },1000);
        });
        return Observable.fromPromise(q);
    };
}

当我把它挂钩到这样的控件时:

control: ['', this.passwordValid.bind(this)]

它永远不会将控制验证更改为有效的'。它总是无效的。我做错了什么?

2 个答案:

答案 0 :(得分:2)

使用您的代码,您将验证器注册为同步验证器(控件的第二个参数)。

对于异步的,您需要使用第三个参数:

control: ['', null, this.passwordValid.bind(this)]

这篇文章让您感兴趣:

答案 1 :(得分:2)

异步验证器应位于索引2

control: ['', null, this.passwordValid.bind(this)]