我已经尝试过
export function uniqueUserNameValidation(commonsService: CommonsService): AsyncValidatorFn {
return (c: AbstractControl): Promise < ValidationErrors | null > | Observable < ValidationErrors | null > => {
return commonsService.uniqueUserName(c.value).pipe(
map(data => {
return data && data.status ? {
'uniqueValidation': true
} : null
})
)
}
}
常用服务方法
uniqueUserName(name:string){
return this.http.get<booleanData>(constDefault.API_URL+"/commons/nameAlreadyExist/"+name+"/Tank")
}
我收到此错误
core.js:1673错误错误:未捕获(按承诺):TypeError:无法 读取未定义的属性“ uniqueUserName” TypeError:无法读取未定义的属性'uniqueUserName'
答案 0 :(得分:1)
Angular的自动依赖项注入仅适用于angular组件构造函数(由DI系统管理)。
作为该问题中所示特定问题的解决方案,您可以将服务注入将要调用uniqueUserNameValidation
的组件中,然后将该服务作为参数传递给uniqueUserNameValidation
。我认为,总的来说,这将是解决您问题的首选方法,因为它不会偏离标准的角度做法。
示例
export class MyComponent {
constructor(private commonsService: CommonsService, private fb: FormBuilder) {}
ngOnInit() {
const form = this.fb.group({
name: ['', uniqueUserNameValidation(this.commonsService)]
})
}
}
答案 1 :(得分:0)
我认为您的CommonsService
是适当的Angular服务。如果是这样,您可以使用Injector
。
首先导入Injector
并在模块(app.module.ts等)和模块初始化实例的构造函数中声明:{p>
import {Injector} from '@angular/core';
export let InjectorInstance: Injector;
...
...
...
export class AppModule {
constructor(private injector: Injector) {
InjectorInstance = this.injector;
}
}
然后在导出函数的文件中,从模块导入变量:
import {InjectorInstance} from 'path/to/app.module';
然后,您可以使用.get()
的{{1}}方法来获取服务实例:
Injector