在延迟加载的模块之间共享Angular 6 Service中的URL

问题描述 投票:1回答:1

[当我使用不同的注入URL字符串创建两个延迟加载的模块之间共享的服务时,模块URL将直接记录在服务构造函数中,但不会在执行HTTP请求的服务函数中更新。

场景:首先,我导航到module1,正确返回模块1项的响应,然后导航到模块,HTTP请求由module1 URL发送,因此返回错误的项

shared.service.ts

@Injectable()
export class SharedService {
  constructor(
    private http: HttpClient,
    @Inject('BASE_URL_TOKEN') private url: string
  ) {
console.log(this.url); // prints the right value
}
  getItems(invoiceCode: string): Observable<any> {
   console.log(this.url); // prints the old value
    return this.http.get(
      this.url + RestUrls.ITEMS_URL,
      httpOptions
    );
  }

}

shared.module.ts

export const BASE_URL_TOKEN = 'BASE_URL_TOKEN';

@NgModule({
  imports: [
    CommonModule,
  ],
  declarations: [
    Components.ViewInvoiceItemsComponent
  ],
  exports: [
    Components.ViewItemsComponent,
  ],
  providers: [SharedService]
})
export class SharedModule {}

module1.module.ts

@NgModule({
  imports: [
    SharedModule,
  ],
  declarations: [
    HomeScreenComponent,
  ],
  providers: [
    [
      { provide: BASE_URL_TOKEN, useValue: 'module1/' }
    ]
  ]
})
export class Module1 {}

module2.module.ts

@NgModule({
  imports: [
    SharedModule,
  ],
  declarations: [
    HomeScreenComponent,
  ],
  providers: [
    [
      { provide: BASE_URL_TOKEN, useValue: 'module2/' }
    ]
  ]
})
export class Module2 {}
angular typescript dependency-injection angular6 angular-cli
1个回答
0
投票

BASE_URL_TOKEN值在共享模块创建SharedService实例时设置。 SharedService现在无法更改BASE_URL_TOKEN值。在您的情况下,要使其正常工作,您将必须在每个模块上创建SharedService的新实例,或将要使用的值明确告知SharedService。另外,请阅读有关InjectionToken

© www.soinside.com 2019 - 2024. All rights reserved.