使用外部服务验证表单

时间:2018-01-07 06:42:16

标签: javascript angular typescript

我正在尝试使用外部服务验证Angular表单,但我收到cannot read property of undefined错误。

我在我的组件中创建了一个简单的表单:

this.myForm = this.fb.group({
  username: ['', [this.validator.username]],
});

从那里开始,我正在调用我的username方法:

@Injectable()
export class ValidatorService {
  constructor(private auth: AuthService) {}
  username(input: FormControl): {[key: string]: any} {
    return { userInvalid: this.auth.validate(input.value) };
  }
}

然后,我的ValidatorService调用一个方法来检查服务器是否存在该用户名:

@Injectable()
export class AuthService {
  validate(username: string): boolean {
    return username !== 'demo';
  }
}

我收到以下错误:Cannot read property 'auth' of undefined。有什么想法吗?

Live demo

1 个答案:

答案 0 :(得分:1)

username方法的执行方式与ValidationService的方法不同,因此您可以放弃上下文this

Function.prototype.bind方法可以帮助您:

username: ['', [this.validator.username.bind(this.validator)]],