如何在Angular类中访问“ this”上下文?

时间:2018-12-31 19:59:39

标签: angular class this undefined

另一个“上下文”问题。

我有一个名为“ isInDatabase()”的功能。它应该是一个自定义验证器,我在“ angular / validator” Github页面上得到了启发。

如您所见,我正在调用“ this.clientService.checkElement ”功能。正如声明的那样,我收到错误消息:“无法读取未定义的属性'checkElement'。”

提示1((?)

根据我已经看到和阅读的内容,即使我使用箭头功能,上下文也已更改,因为此箭头功能包装在另一个功能中。

提示2:(?)

我尝试实现此功能:constructor (private clientService: ClientService) {},但随后的错误是:错误TS2339:属性'clientService'在'typeof CustomValidators'类型上不存在。

这是代码:

export class CustomValidators {

    private static clientService: ClientService;

  static isInDatabase(elementType: string): ValidatorFn {
    return (control: AbstractControl): ValidationErrors | null => {
      this.clientService.checkElement(control.value, elementType)
        .subscribe(() => {
            return {isInDB: true};
          },
          (error) => {
            return {isInDB: true};
          });
      return (null);
    };
  }
}

1 个答案:

答案 0 :(得分:1)

您无法从静态方法访问this,因为this引用了 this 类的实例,并且您在静态方法中没有实例。

这篇文章也是一本不错的书,可以更好地理解'this' in TypeScript