Angular 注入组件的服务在构造函数外部未定义
所以我遇到了一个奇怪的问题,我试图将一些服务注入到组件中,但当我想在函数上使用它时,其中一些是未定义的 我以前在其他组件上使用过这些服务,没有问题。此外,我已经在构造函数中添加了关键字“public”或“private”Angular 注入组件的服务在构造函数外部未定义,angular,angular-services,Angular,Angular Services,所以我遇到了一个奇怪的问题,我试图将一些服务注入到组件中,但当我想在函数上使用它时,其中一些是未定义的 我以前在其他组件上使用过这些服务,没有问题。此外,我已经在构造函数中添加了关键字“public”或“private” export class GeneSearchComponent { constructor(public router: Router, public clinicalFilteringService: ClinicalFilterin
export class GeneSearchComponent {
constructor(public router: Router,
public clinicalFilteringService: ClinicalFilteringService,
public searchBarService: SearchBarService ) {
//They all are defined within constructor
console.log(this.clinicalFilteringService);
console.log(this.router);
console.log(this.searchBarService);
}
test(query) {
//clinicalFilteringService and router are undefined
console.log(this.clinicalFilteringService);
console.log(this.router);
//searchBarService is still defined
console.log(this.searchBarService);
}
}
什么可能导致问题
编辑:
因此,我发现将函数更改为arrow函数可以解决问题,但我仍然不知道为什么它可以与arrow函数一起工作,而不能在没有它的情况下工作。您的所有服务都使用
HttpClient
?@manish nope,我的任何服务都不使用HttpClient所以将函数更改为arrow函数可以解决问题,但不知道为什么它会起作用。如果有人知道,你们可以让我知道。你们也可以添加那些edit
s吗?@user3794740用于箭头函数查询:箭头函数没有自己的“this”。使用封闭词法范围的“this”值;箭头函数遵循普通变量查找规则。因此,在搜索当前作用域中不存在的“this”时,他们最终从其封闭作用域中找到了“this”。您的所有服务是否都使用了HttpClient
?@manish nope,我的任何服务都没有使用HttpClient。因此,将该函数更改为箭头函数可以解决问题,但不确定它为什么有效。如果有人知道,你们可以让我知道。你们也可以添加那些edit
s吗?@user3794740用于箭头函数查询:箭头函数没有自己的“this”。使用封闭词法范围的“this”值;箭头函数遵循普通变量查找规则。因此,在搜索当前范围中不存在的“this”时,他们最终从其封闭范围中找到了“this”。