Dependency injection 在同一屏幕上注入不同的服务
我有两个屏幕:Dependency injection 在同一屏幕上注入不同的服务,dependency-injection,aurelia,Dependency Injection,Aurelia,我有两个屏幕: 屏幕1(Empleado-Empleado-form.js,Empleado-form.js是从Empleado.js调用的),其中注入了Service1 屏幕2(departmento departmento.js),其中注入了服务2 这是对我错误的一次重演: 当导航到屏幕1时,服务1被注入 当导航到Screen2时,将注入Service2 当导航回屏幕1时,服务2被注入 我假设预期的行为是每个服务都被注入带有@inspect的屏幕,而不是随机注入到下一个屏幕 这是github
- 屏幕1位于:src/部门(服务在内部)
- 屏幕2位于:src/empleado(服务在内部,empleado-form.js是empleado-service.js的注入位置。)
@inject(Screen1Service)
export class Screen1{
constructor(service){
this.service = service
}
...service use to fetch/post data
}
如果需要修改,让我知道我可以用承诺做一个要点。然而,我不知道是否可以在gist上导航 服务注入确实是正确的。问题在于这些服务使用HttpClient的方式 每个服务类在其构造函数中配置
HttpClient
。由于将一个HttpClient
in注入到所有服务中,后者创建的服务将覆盖以前的配置。此外,每个服务本身就是一个单例,因此其构造函数和HttpClient
配置只运行一次
因此,导航顺序很重要。当从Screen1->Screen2->导航回Screen1时,Service2中的最后一个配置生效。如果您将序列更改为Screen2->Screen1->Screen2,您将看到相反的结果
要解决此问题,您应该仅在一个位置配置
HttpClient
,例如在main
或app
中。参见此服务注入确实是正确的。问题在于这些服务使用HttpClient的方式
每个服务类在其构造函数中配置HttpClient
。由于将一个HttpClient
in注入到所有服务中,后者创建的服务将覆盖以前的配置。此外,每个服务本身就是一个单例,因此其构造函数和HttpClient
配置只运行一次
因此,导航顺序很重要。当从Screen1->Screen2->导航回Screen1时,Service2中的最后一个配置生效。如果您将序列更改为Screen2->Screen1->Screen2,您将看到相反的结果
要解决此问题,您应该仅在一个位置配置
HttpClient
,例如在main
或app
中。看到这个你怎么知道“当导航回屏幕1时,服务2被注入”?这就是我推断的原因。在两个屏幕上都有一个自定义表组件,当您导航回屏幕1时。在自定义表组件中可以看到从Service2中获取的数据。我相信注入没有错。问题在于您配置HttpClient的方式。要确认这一点,您能否在screen1的activate()
中console.log(this.service)
?该服务已正确注入。导航上的更改是url。返回时,服务1上使用了Service2的url。为什么会这样?你怎么知道“当导航回屏幕1时,服务2被注入”?这就是我推断的原因。在两个屏幕上都有一个自定义表组件,当您导航回屏幕1时。在自定义表组件中可以看到从Service2中获取的数据。我相信注入没有错。问题在于您配置HttpClient的方式。要确认这一点,您能否在screen1的activate()
中console.log(this.service)
?该服务已正确注入。导航上的更改是url。返回时,服务1上使用了Service2的url。为什么会这样?您将如何配置每个特定url的api url,或者如何将其放入每个获取中?我将配置api基本url(好的,配置方法名称为withBaseUrl
),并在每个获取中使用相对url。例如,在您的情况下,基本URL可以是http://hrm.dev/api
或使用aurelia api。它让您可以很好地定义端点:您将如何为每个特定url配置api url,或者如何将其放入每个提取中?我将配置api基本url(出于某种目的,配置方法名称为withBaseUrl
),并在每个提取中使用相对url。例如,在您的情况下,基本URL可以是http://hrm.dev/api
或使用aurelia api。它可以让您以一种很好的方式定义端点: